Fixed a bug when handling test-dependencies: XML-mappings were ignored
[hibernate4-maven-plugin] / src / main / java / de / juplo / plugins / hibernate / AbstractSchemaMojo.java
index 0f143f5..41c55de 100644 (file)
@@ -485,11 +485,16 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
       Properties properties = new Properties();
       ConfigLoader configLoader = new ConfigLoader(bootstrapServiceRegitry);
 
-      /** Loading and merging configuration */
+      /** Loading configuration */
       properties.putAll(loadProperties(configLoader));
       LoadedConfig config = loadConfig(configLoader);
       if (config != null)
         properties.putAll(config.getConfigurationValues());
+
+      /** Add the remaining class-path-elements */
+      addDirectDependenciesClassPath(classLoader);
+
+      /** Loading and merging configuration from persistence-unit(s) */
       ParsedPersistenceXmlDescriptor unit =
           loadPersistenceUnit(classLoaderService, properties);
       if (unit != null)
@@ -518,7 +523,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
       final MetadataSources sources = new MetadataSources(serviceRegistry);
 
       /** Add the remaining class-path-elements */
-      completeClassPath(classLoader);
+      addAllDependenciesToClassPath(classLoader);
 
       /** Apply mappings from hibernate-configuration, if present */
       if (config != null)
@@ -534,6 +539,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
         if (scanClasses == null)
           scanClasses = true;
         Set<URL> urls = new HashSet<URL>();
+        getLog().debug("Compiling the dependencies, that are scanned for annotated classes");
         if (scanClasses)
           addRoot(urls, outputDirectory);
         if (scanTestClasses)
@@ -546,19 +552,28 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
         /** Follow configuration in persisten unit */
         if (scanClasses == null)
           scanClasses = !unit.isExcludeUnlistedClasses();
+        getLog().debug("Compiling the dependencies, that are scanned for annotated classes");
+
         Set<URL> urls = new HashSet<URL>();
         if (scanClasses)
         {
+          getLog().debug("Only dependencies relative to persistent-unit " + unit.getName() + " are scanned!");
           /**
            * Scan the root of the persiten unit and configured jars for
            * annotated classes
            */
+          getLog().debug(" - adding " + unit.getPersistenceUnitRootUrl());
           urls.add(unit.getPersistenceUnitRootUrl());
           for (URL url : unit.getJarFileUrls())
+          {
+            getLog().debug(" - adding " + url);
             urls.add(url);
+          }
+          if (scanTestClasses)
+            addRoot(urls, testOutputDirectory);
         }
-        if (scanTestClasses)
-          addRoot(urls, testOutputDirectory);
+        else
+          getLog().debug("Scanning of unlisted classes is prohibited in persistent-unit " + unit.getName());
         classes = scanUrls(urls);
         for (String className : unit.getManagedClassNames())
           classes.add(className);
@@ -591,9 +606,10 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
          * Add mappings from files, that are explicitly configured in the
          * persistence unit
          */
+        getLog().info("Adding mappings from persistence-unit " + unit.getName());
         for (String mapping : unit.getMappingFileNames())
         {
-          getLog().info("Adding explicitly configured mapping from " + mapping);
+          getLog().info(" - adding " + mapping);
           is = classLoader.getResourceAsStream(mapping);
           if (is != null)
           {
@@ -828,20 +844,39 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
     }
   }
 
-  private void completeClassPath(MutableClassLoader classLoader)
+  private void addDirectDependenciesClassPath(MutableClassLoader classLoader)
       throws
         MojoExecutionException
   {
     try
     {
-      getLog().debug("Completing class-paths of the ClassLoader for project-dependencies...");
-      List<String> classpathFiles = project.getCompileClasspathElements();
+      getLog().debug("Adding all direct project-dependencies to the ClassLoader...");
+      LinkedHashSet<URL> urls = new LinkedHashSet<URL>();
+      addDependencies(urls);
       if (scanTestClasses)
-        classpathFiles.addAll(project.getTestClasspathElements());
+        addRoot(urls, testOutputDirectory);
+      classLoader.add(urls);
+    }
+    catch (Exception e)
+    {
+      getLog().error("Error while creating ClassLoader!", e);
+      throw new MojoExecutionException(e.getMessage());
+    }
+  }
+
+  private void addAllDependenciesToClassPath(MutableClassLoader classLoader)
+      throws
+        MojoExecutionException
+  {
+    try
+    {
+      getLog().debug("Adding all project-dependencies to the ClassLoader...");
+      List<String> classpathFiles = project.getCompileClasspathElements();
+      classpathFiles.addAll(project.getTestClasspathElements());
       LinkedHashSet<URL> urls = new LinkedHashSet<URL>();
       for (String pathElement : classpathFiles)
       {
-        getLog().debug("Dependency: " + pathElement);
+        getLog().debug(" - adding " + pathElement);
         urls.add(new File(pathElement).toURI().toURL());
       }
       classLoader.add(urls);
@@ -1160,9 +1195,9 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
               // TODO: add support to read all mappings under a directory
               throw new MojoFailureException(file.getAbsolutePath() + " is a directory");
             if (tracker.track(filename, new FileInputStream(file)))
-              getLog().debug("Found new or modified mapping-file: " + filename);
+              getLog().debug(" - found new or modified mapping-file: " + filename);
             else
-              getLog().debug("Mapping-file unchanged: " + filename);
+              getLog().debug(" - mapping-file unchanged: " + filename);
 
             sources.addFile(file);
           }
@@ -1184,12 +1219,12 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
       File dir = new File(path);
       if (dir.exists())
       {
-        getLog().info("Adding " + dir.getAbsolutePath() + " to the list of roots to scan...");
+        getLog().info(" - adding " + dir.getAbsolutePath());
         urls.add(dir.toURI().toURL());
       }
       else
         getLog().warn(
-            "the directory cannot be scanned for annotated classes, " +
+            "The directory cannot be scanned for annotated classes, " +
             "because it does not exist: " +
             dir.getAbsolutePath()
             );
@@ -1210,7 +1245,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
         Matcher matcher = SPLIT.matcher(scanDependencies);
         while (matcher.find())
         {
-          getLog().info("Adding dependencies from scope " + matcher.group() + " to the list of roots to scan");
+          getLog().debug("Adding dependencies from scope " + matcher.group() + " to the list of roots to scan");
           for (Artifact artifact : project.getDependencyArtifacts())
           {
             if (!artifact.getScope().equalsIgnoreCase(matcher.group()))
@@ -1220,7 +1255,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
               getLog().warn("Cannot add dependency " + artifact.getId() + ": no JAR-file available!");
               continue;
             }
-            getLog().info("Adding dependencies from scope " + artifact.getId() + " to the list of roots to scan");
+            getLog().debug(" - adding " + artifact.getId());
             urls.add(artifact.getFile().toURI().toURL());
           }
         }