diff --git a/maven/pom.xml b/maven/pom.xml index 5a5ea2b0bb..bbd87b5396 100644 --- a/maven/pom.xml +++ b/maven/pom.xml @@ -74,6 +74,7 @@ 3.5 3.5.2 + 3.9.9 2.9 @@ -97,6 +98,11 @@ maven-plugin-api ${maven-plugin-api.version} + + org.apache.maven + maven-core + ${maven-core.version} + org.apache.maven.plugin-tools maven-plugin-annotations diff --git a/maven/src/main/java/org/hibernate/tool/maven/AbstractGenerationMojo.java b/maven/src/main/java/org/hibernate/tool/maven/AbstractGenerationMojo.java index 56d8433674..ea76fa0f74 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/AbstractGenerationMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/AbstractGenerationMojo.java @@ -23,10 +23,18 @@ 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.Arrays; +import java.util.HashSet; 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.tool.api.metadata.MetadataDescriptor; import org.hibernate.tool.api.metadata.MetadataDescriptorFactory; @@ -83,15 +91,24 @@ public abstract class AbstractGenerationMojo 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() + "..."); - RevengStrategy 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() + "..."); + RevengStrategy 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 RevengStrategy setupReverseEngineeringStrategy() { @@ -134,6 +151,18 @@ private MetadataDescriptor createJdbcDescriptor(RevengStrategy strategy, Propert strategy, properties); } + + 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/src/main/java/org/hibernate/tool/maven/GenerateDaoMojo.java b/maven/src/main/java/org/hibernate/tool/maven/GenerateDaoMojo.java index afbe350dec..98554cf7e5 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/GenerateDaoMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/GenerateDaoMojo.java @@ -21,6 +21,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.export.Exporter; import org.hibernate.tool.api.export.ExporterConstants; import org.hibernate.tool.api.export.ExporterFactory; @@ -36,7 +37,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 AbstractGenerationMojo { /** The directory into which the DAOs will be generated. */ diff --git a/maven/src/main/java/org/hibernate/tool/maven/GenerateDdlMojo.java b/maven/src/main/java/org/hibernate/tool/maven/GenerateDdlMojo.java index a60958f51b..8ade339a4e 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/GenerateDdlMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/GenerateDdlMojo.java @@ -21,6 +21,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; @@ -37,7 +38,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 GenerateDdlMojo extends AbstractGenerationMojo { /** The directory into which the DDLs will be generated. */ diff --git a/maven/src/main/java/org/hibernate/tool/maven/GenerateHbmMojo.java b/maven/src/main/java/org/hibernate/tool/maven/GenerateHbmMojo.java index 13dc50aa5e..80aa790a4f 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/GenerateHbmMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/GenerateHbmMojo.java @@ -21,6 +21,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.export.Exporter; import org.hibernate.tool.api.export.ExporterConstants; import org.hibernate.tool.api.export.ExporterFactory; @@ -36,7 +37,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 AbstractGenerationMojo { /** The directory into which the DAOs will be generated. */ diff --git a/maven/src/main/java/org/hibernate/tool/maven/GenerateJavaMojo.java b/maven/src/main/java/org/hibernate/tool/maven/GenerateJavaMojo.java index 3ec6709185..faf6ae588e 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/GenerateJavaMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/GenerateJavaMojo.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.export.Exporter; import org.hibernate.tool.api.export.ExporterConstants; import org.hibernate.tool.api.export.ExporterFactory; @@ -36,7 +37,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 GenerateJavaMojo extends AbstractGenerationMojo { /** The directory into which the JPA entities will be generated. */ @@ -69,6 +73,8 @@ protected void executeExporter(MetadataDescriptor metadataDescriptor) { getLog().info("Starting POJO export to directory: " + outputDirectory + "..."); pojoExporter.start(); } + + } diff --git a/maven/src/main/java/org/hibernate/tool/maven/TransformHbmMojo.java b/maven/src/main/java/org/hibernate/tool/maven/TransformHbmMojo.java index 4ae75e5113..e3f94e3bbb 100644 --- a/maven/src/main/java/org/hibernate/tool/maven/TransformHbmMojo.java +++ b/maven/src/main/java/org/hibernate/tool/maven/TransformHbmMojo.java @@ -13,6 +13,7 @@ import org.apache.maven.plugin.MojoFailureException; 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.MetadataSources; import org.hibernate.boot.jaxb.Origin; import org.hibernate.boot.jaxb.SourceType; @@ -31,7 +32,10 @@ import jakarta.xml.bind.JAXBException; import jakarta.xml.bind.Marshaller; -@Mojo(name = "hbm2orm", defaultPhase = GENERATE_RESOURCES) +@Mojo( + name = "hbm2orm", + defaultPhase = GENERATE_RESOURCES, + requiresDependencyResolution = ResolutionScope.RUNTIME) public class TransformHbmMojo extends AbstractMojo { @Parameter(defaultValue = "${project.basedir}/src/main/resources")