Reverted unnecessary changes
authorKai Moritz <kai@juplo.de>
Sat, 7 Sep 2013 20:40:28 +0000 (22:40 +0200)
committerKai Moritz <kai@juplo.de>
Sat, 7 Sep 2013 20:46:42 +0000 (22:46 +0200)
src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java

index 8d233d7..246f585 100644 (file)
@@ -214,7 +214,6 @@ public class Hbm2DdlMojo extends AbstractMojo
    *   <li><strong>SCRIPT</strong> export schema to SQL-script</li>
    *   <li><strong>BOTH</strong></li>
    * </ul>
-   *
    * @parameter expression="${hibernate.export.target}" default-value="EXPORT"
    */
   private String target;
@@ -227,7 +226,6 @@ public class Hbm2DdlMojo extends AbstractMojo
    *   <li><strong>DROP</strong> drop database-schema</li>
    *   <li><strong>BOTH</strong> (<strong>DEFAULT!</strong>)</li>
    * </ul>
-   *
    * @parameter expression="${hibernate.export.type}" default-value="BOTH"
    */
   private String type;
@@ -260,11 +258,6 @@ public class Hbm2DdlMojo extends AbstractMojo
    */
   private Boolean envers;
 
-  /**
-   * Transient attribute, used only for knowing if the schema has changed since it was last run.
-   */
-  private boolean modified;
-
   @Override
   public void execute()
     throws
@@ -283,7 +276,7 @@ public class Hbm2DdlMojo extends AbstractMojo
       throw new MojoExecutionException("Cannot scan for annotated classes in " + outputDirectory + ": directory does not exist!");
 
     Map<String,String> md5s;
-    modified = false;
+    boolean modified = false;
     File saved = new File(buildDirectory + File.separator + MD5S);
 
     if (saved.exists())
@@ -314,7 +307,7 @@ public class Hbm2DdlMojo extends AbstractMojo
       }
     }
 
-    ClassLoader classLoader;
+    ClassLoader classLoader = null;
     try
     {
       getLog().debug("Creating ClassLoader for project-dependencies...");
@@ -335,6 +328,89 @@ public class Hbm2DdlMojo extends AbstractMojo
       throw new MojoExecutionException(e.getMessage());
     }
 
+    Set<Class<?>> classes =
+        new TreeSet<Class<?>>(
+            new Comparator<Class<?>>() {
+              @Override
+              public int compare(Class<?> a, Class<?> b)
+              {
+                return a.getName().compareTo(b.getName());
+              }
+            }
+          );
+
+    try
+    {
+      AnnotationDB db = new AnnotationDB();
+      getLog().info("Scanning directory " + outputDirectory + " for annotated classes...");
+      URL dirUrl = dir.toURI().toURL();
+      db.scanArchives(dirUrl);
+      if (scanTestClasses)
+      {
+        dir = new File(testOutputDirectory);
+        if (!dir.exists())
+          throw new MojoExecutionException("Cannot scan for annotated test-classes in " + testOutputDirectory + ": directory does not exist!");
+        getLog().info("Scanning directory " + testOutputDirectory + " for annotated classes...");
+        dirUrl = dir.toURI().toURL();
+        db.scanArchives(dirUrl);
+      }
+
+      Set<String> classNames = new HashSet<String>();
+      if (db.getAnnotationIndex().containsKey(Entity.class.getName()))
+        classNames.addAll(db.getAnnotationIndex().get(Entity.class.getName()));
+      if (db.getAnnotationIndex().containsKey(MappedSuperclass.class.getName()))
+        classNames.addAll(db.getAnnotationIndex().get(MappedSuperclass.class.getName()));
+      if (db.getAnnotationIndex().containsKey(Embeddable.class.getName()))
+        classNames.addAll(db.getAnnotationIndex().get(Embeddable.class.getName()));
+
+      MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
+      for (String name : classNames)
+      {
+        Class<?> annotatedClass = classLoader.loadClass(name);
+        classes.add(annotatedClass);
+        InputStream is =
+            annotatedClass
+                .getResourceAsStream(annotatedClass.getSimpleName() + ".class");
+        byte[] buffer = new byte[1024*4]; // copy data in 4MB-chunks
+        int i;
+        while((i = is.read(buffer)) > -1)
+          digest.update(buffer, 0, i);
+        is.close();
+        byte[] bytes = digest.digest();
+        BigInteger bi = new BigInteger(1, bytes);
+        String newMd5 = String.format("%0" + (bytes.length << 1) + "x", bi);
+        String oldMd5 = !md5s.containsKey(name) ? "" : md5s.get(name);
+        if (!newMd5.equals(oldMd5))
+        {
+          getLog().debug("Found new or modified annotated class: " + name);
+          modified = true;
+          md5s.put(name, newMd5);
+        }
+        else
+        {
+          getLog().debug(oldMd5 + " -> class unchanged: " + name);
+        }
+      }
+    }
+    catch (ClassNotFoundException e)
+    {
+      getLog().error("Error while adding annotated classes!", e);
+      throw new MojoExecutionException(e.getMessage());
+    }
+    catch (Exception e)
+    {
+      getLog().error("Error while scanning!", e);
+      throw new MojoFailureException(e.getMessage());
+    }
+
+    if (classes.isEmpty())
+      throw new MojoFailureException("No annotated classes found in directory " + outputDirectory);
+
+    getLog().debug("Detected classes with mapping-annotations:");
+    for (Class<?> annotatedClass : classes)
+      getLog().debug("  " + annotatedClass.getName());
+
+
     Properties properties = new Properties();
 
     /** Try to read configuration from properties-file */
@@ -472,7 +548,16 @@ public class Hbm2DdlMojo extends AbstractMojo
       throw new MojoFailureException("Hibernate-Configuration is missing!");
     }
 
-    Target target;
+    Configuration config = new Configuration();
+    config.setProperties(properties);
+    getLog().debug("Adding annotated classes to hibernate-mapping-configuration...");
+    for (Class<?> annotatedClass : classes)
+    {
+      getLog().debug("Class " + annotatedClass);
+      config.addAnnotatedClass(annotatedClass);
+    }
+
+    Target target = null;
     try
     {
       target = Target.valueOf(this.target.toUpperCase());
@@ -483,7 +568,7 @@ public class Hbm2DdlMojo extends AbstractMojo
       getLog().error("Valid values are: NONE, SCRIPT, EXPORT, BOTH");
       throw new MojoExecutionException("Invalid value for configuration-option \"target\"");
     }
-    Type type;
+    Type type = null;
     try
     {
       type = Type.valueOf(this.type.toUpperCase());
@@ -578,16 +663,6 @@ public class Hbm2DdlMojo extends AbstractMojo
        */
       Thread.currentThread().setContextClassLoader(classLoader);
 
-      Set<Class<?>> classes = scanForAnnotations(dir, classLoader, md5s);
-
-      Configuration config = new Configuration();
-      config.setProperties(properties);
-      getLog().debug("Adding annotated classes to hibernate-mapping-configuration...");
-      for (Class<?> annotatedClass : classes)
-      {
-        getLog().debug("Class " + annotatedClass);
-        config.addAnnotatedClass(annotatedClass);
-      }
       config.buildMappings();
       if ("true".equals(properties.getProperty(ENVERS)))
       {
@@ -737,77 +812,4 @@ public class Hbm2DdlMojo extends AbstractMojo
       return this.target.equals(other.target);
     }
   }
-
-  public Set<Class<?>> scanForAnnotations(File dir, ClassLoader classLoader, Map<String,String> md5s) throws MojoExecutionException, MojoFailureException {
-    Set<Class<?>> classes = new TreeSet<Class<?>>(
-        new Comparator<Class<?>>() {
-          @Override
-          public int compare(Class<?> a, Class<?> b) {
-            return a.getName().compareTo(b.getName());
-          }
-        }
-    );
-
-    try {
-      AnnotationDB db = new AnnotationDB();
-      getLog().info("Scanning directory " + outputDirectory + " for annotated classes...");
-      URL dirUrl = dir.toURI().toURL();
-      db.scanArchives(dirUrl);
-      if (scanTestClasses) {
-        dir = new File(testOutputDirectory);
-        if (!dir.exists())
-          throw new MojoExecutionException("Cannot scan for annotated test-classes in " + testOutputDirectory + ": directory does not exist!");
-        getLog().info("Scanning directory " + testOutputDirectory + " for annotated classes...");
-        dirUrl = dir.toURI().toURL();
-        db.scanArchives(dirUrl);
-      }
-
-      Set<String> classNames = new HashSet<String>();
-      if (db.getAnnotationIndex().containsKey(Entity.class.getName()))
-        classNames.addAll(db.getAnnotationIndex().get(Entity.class.getName()));
-      if (db.getAnnotationIndex().containsKey(MappedSuperclass.class.getName()))
-        classNames.addAll(db.getAnnotationIndex().get(MappedSuperclass.class.getName()));
-      if (db.getAnnotationIndex().containsKey(Embeddable.class.getName()))
-        classNames.addAll(db.getAnnotationIndex().get(Embeddable.class.getName()));
-
-      MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
-      for (String name : classNames) {
-        Class<?> annotatedClass = classLoader.loadClass(name);
-        classes.add(annotatedClass);
-        InputStream is =
-            annotatedClass
-                .getResourceAsStream(annotatedClass.getSimpleName() + ".class");
-        byte[] buffer = new byte[1024*4]; // copy data in 4MB-chunks
-        int i;
-        while((i = is.read(buffer)) > -1)
-          digest.update(buffer, 0, i);
-        is.close();
-        byte[] bytes = digest.digest();
-        BigInteger bi = new BigInteger(1, bytes);
-        String newMd5 = String.format("%0" + (bytes.length << 1) + "x", bi);
-        String oldMd5 = !md5s.containsKey(name) ? "" : md5s.get(name);
-        if (!newMd5.equals(oldMd5))
-        {
-          getLog().debug("Found new or modified annotated class: " + name);
-          modified = true;
-          md5s.put(name, newMd5);
-        }
-        else
-        {
-          getLog().debug(oldMd5 + " -> class unchanged: " + name);
-        }
-      }
-    } catch (Exception e) {
-      getLog().error("Error while scanning!", e);
-      throw new MojoFailureException(e.getMessage());
-    }
-
-    if (classes.isEmpty())
-      throw new MojoFailureException("No annotated classes found in directory " + outputDirectory);
-
-    getLog().debug("Detected classes with mapping-annotations:");
-    for (Class<?> annotatedClass : classes)
-      getLog().debug("  " + annotatedClass.getName());
-    return classes;
-  }
 }