diff --git a/maven-plugin/pom.xml b/maven-plugin/pom.xml index 465790347c..885c09194a 100644 --- a/maven-plugin/pom.xml +++ b/maven-plugin/pom.xml @@ -57,6 +57,7 @@ 3.5 3.5.2 + 3.9.9 2.9 @@ -75,6 +76,13 @@ org.apache.maven maven-plugin-api ${maven-plugin-api.version} + provided + + + org.apache.maven + maven-core + ${maven-core.version} + provided org.apache.maven.plugin-tools diff --git a/maven-plugin/src/main/java/org/hibernate/mvn/AbstractHbm2xMojo.java b/maven-plugin/src/main/java/org/hibernate/mvn/AbstractHbm2xMojo.java index f9b4c27b50..a1dd133fc4 100644 --- a/maven-plugin/src/main/java/org/hibernate/mvn/AbstractHbm2xMojo.java +++ b/maven-plugin/src/main/java/org/hibernate/mvn/AbstractHbm2xMojo.java @@ -1,7 +1,19 @@ package org.hibernate.mvn; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Properties; + +import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; import org.apache.tools.ant.BuildException; import org.hibernate.cfg.reveng.OverrideRepository; import org.hibernate.cfg.reveng.ReverseEngineeringSettings; @@ -9,12 +21,6 @@ import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.api.metadata.MetadataDescriptorFactory; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Properties; - public abstract class AbstractHbm2xMojo extends AbstractMojo { // For reveng strategy @@ -63,15 +69,24 @@ public abstract class AbstractHbm2xMojo extends AbstractMojo { // Not exposed for now private boolean preferBasicCompositeIds = true; + @Parameter(defaultValue = "${project}", readonly = true, required = true) + private MavenProject project; + public void execute() { - getLog().info("Starting " + this.getClass().getSimpleName() + "..."); - ReverseEngineeringStrategy strategy = setupReverseEngineeringStrategy(); - if (propertyFile.exists()) { - executeExporter(createJdbcDescriptor(strategy, loadPropertiesFile())); - } else { - getLog().info("Property file '" + propertyFile + "' cannot be found, aborting..."); - } - getLog().info("Finished " + this.getClass().getSimpleName() + "!"); + ClassLoader original = Thread.currentThread().getContextClassLoader(); + try { + Thread.currentThread().setContextClassLoader(createExporterClassLoader(original)); + getLog().info("Starting " + this.getClass().getSimpleName() + "..."); + ReverseEngineeringStrategy strategy = setupReverseEngineeringStrategy(); + if (propertyFile.exists()) { + executeExporter(createJdbcDescriptor(strategy, loadPropertiesFile())); + } else { + getLog().info("Property file '" + propertyFile + "' cannot be found, aborting..."); + } + getLog().info("Finished " + this.getClass().getSimpleName() + "!"); + } finally { + Thread.currentThread().setContextClassLoader(original); + } } private ReverseEngineeringStrategy setupReverseEngineeringStrategy() { @@ -121,5 +136,17 @@ private MetadataDescriptor createJdbcDescriptor(ReverseEngineeringStrategy strat preferBasicCompositeIds); } + private ClassLoader createExporterClassLoader(ClassLoader parent) { + ArrayList urls = new ArrayList(); + try { + for (String cpe : project.getRuntimeClasspathElements()) { + urls.add(new File(cpe).toURI().toURL()); + } + } catch (DependencyResolutionRequiredException | MalformedURLException e) { + throw new RuntimeException("Problem while constructing project classloader", e); + } + return new URLClassLoader(urls.toArray(new URL[0]), parent); + } + protected abstract void executeExporter(MetadataDescriptor metadataDescriptor); } diff --git a/maven-plugin/src/main/java/org/hibernate/mvn/GenerateDaoMojo.java b/maven-plugin/src/main/java/org/hibernate/mvn/GenerateDaoMojo.java index f4235153a5..c7cb63f599 100644 --- a/maven-plugin/src/main/java/org/hibernate/mvn/GenerateDaoMojo.java +++ b/maven-plugin/src/main/java/org/hibernate/mvn/GenerateDaoMojo.java @@ -25,6 +25,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.hbm2x.DAOExporter; @@ -33,7 +34,10 @@ *

* See: https://docs.jboss.org/tools/latest/en/hibernatetools/html_single/#d0e4821 */ -@Mojo(name = "hbm2dao", defaultPhase = GENERATE_SOURCES) +@Mojo( + name = "hbm2dao", + defaultPhase = GENERATE_SOURCES, + requiresDependencyResolution = ResolutionScope.RUNTIME) public class GenerateDaoMojo extends AbstractHbm2xMojo { /** The directory into which the DAOs will be generated. */ diff --git a/maven-plugin/src/main/java/org/hibernate/mvn/GenerateHbmMojo.java b/maven-plugin/src/main/java/org/hibernate/mvn/GenerateHbmMojo.java index 6a8581cac2..2a2b368efd 100644 --- a/maven-plugin/src/main/java/org/hibernate/mvn/GenerateHbmMojo.java +++ b/maven-plugin/src/main/java/org/hibernate/mvn/GenerateHbmMojo.java @@ -25,6 +25,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.hbm2x.HibernateMappingExporter; @@ -33,7 +34,10 @@ *

* See: https://docs.jboss.org/tools/latest/en/hibernatetools/html_single/#d0e4821 */ -@Mojo(name = "generateHbm", defaultPhase = GENERATE_SOURCES) +@Mojo( + name = "generateHbm", + defaultPhase = GENERATE_SOURCES, + requiresDependencyResolution = ResolutionScope.RUNTIME) public class GenerateHbmMojo extends AbstractHbm2xMojo { /** The directory into which the DAOs will be generated. */ diff --git a/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2DdlMojo.java b/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2DdlMojo.java index 0e2a973b95..1eec0618d0 100644 --- a/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2DdlMojo.java +++ b/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2DdlMojo.java @@ -2,6 +2,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; import org.hibernate.boot.Metadata; import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.hbm2ddl.SchemaExport; @@ -18,7 +19,10 @@ *

* See https://docs.jboss.org/tools/latest/en/hibernatetools/html_single/#d0e4651 */ -@Mojo(name = "hbm2ddl", defaultPhase = GENERATE_RESOURCES) +@Mojo( + name = "hbm2ddl", + defaultPhase = GENERATE_RESOURCES, + requiresDependencyResolution = ResolutionScope.RUNTIME) public class Hbm2DdlMojo extends AbstractHbm2xMojo { /** The directory into which the DDLs will be generated. */ diff --git a/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2JavaMojo.java b/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2JavaMojo.java index 893ab33917..5037804569 100644 --- a/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2JavaMojo.java +++ b/maven-plugin/src/main/java/org/hibernate/mvn/Hbm2JavaMojo.java @@ -2,6 +2,7 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; import org.hibernate.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.hbm2x.POJOExporter; @@ -14,7 +15,10 @@ *

* See: https://docs.jboss.org/tools/latest/en/hibernatetools/html_single/#d0e4821 */ -@Mojo(name = "hbm2java", defaultPhase = GENERATE_SOURCES) +@Mojo( + name = "hbm2java", + defaultPhase = GENERATE_SOURCES, + requiresDependencyResolution = ResolutionScope.RUNTIME) public class Hbm2JavaMojo extends AbstractHbm2xMojo { /** The directory into which the JPA entities will be generated. */