X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate4%2FHbm2DdlMojo.java;h=5cca01ebd37f030689c98c3d75d5ca6a2e27e509;hb=ba2e48a347a839be63cbce4b7ca2469a600748c6;hp=f9912536b76ffb7810c841bbb1815da49d89743c;hpb=2b1147d5e99c764c1f6816f4d4f000abe260097c;p=hibernate-maven-plugin diff --git a/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java b/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java index f9912536..5cca01eb 100644 --- a/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate4/Hbm2DdlMojo.java @@ -47,9 +47,12 @@ import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.persistence.Embeddable; import javax.persistence.Entity; import javax.persistence.MappedSuperclass; +import org.apache.maven.artifact.Artifact; import org.apache.maven.model.Resource; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -85,7 +88,10 @@ public class Hbm2DdlMojo extends AbstractMojo public final static String NAMING_STRATEGY="hibernate.ejb.naming_strategy"; public final static String ENVERS = "hibernate.export.envers"; - private final static String MD5S = "schema.md5s"; + public final static String MD5S = "schema.md5s"; + + private final static Pattern split = Pattern.compile("[^,\\s]+"); + /** * The maven project. @@ -116,6 +122,7 @@ public class Hbm2DdlMojo extends AbstractMojo * Additonally, all dependencies are scanned for annotated classes. * * @parameter property="project.build.outputDirectory" + * @since 1.0 */ private String outputDirectory; @@ -126,9 +133,26 @@ public class Hbm2DdlMojo extends AbstractMojo * artifact will be scanned for hibernate-annotated classes additionally. * * @parameter property="hibernate.export.scan_testclasses" default-value="false" + * @since 1.0.1 */ private boolean scanTestClasses; + /** + * Dependency-Scopes, that should be scanned for annotated classes. + *
+ * By default, only dependencies in the scope compile
are
+ * scanned for annotated classes. Multiple scopes can be seperated by
+ * white space or commas.
+ *
+ * The plugin does not scan for annotated classes in transitive + * dependencies. If some of your annotated classes are hidden in a + * transitive dependency, you can simply add that dependency explicitly. + * + * @parameter property="hibernate.export.scan_dependencies" default-value="compile" + * @since 1.0.3 + */ + private String scanDependencies; + /** * Test-Classes-Directory to scan. *
@@ -139,6 +163,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* to true
!
*
* @parameter property="project.build.testOutputDirectory"
+ * @since 1.0.2
*/
private String testOutputDirectory;
@@ -153,7 +178,8 @@ public class Hbm2DdlMojo extends AbstractMojo
* The excecution is skipped automatically, if no modified or newly added
* annotated classes are found and the dialect was not changed.
*
- * @parameter property="hibernate.export.skip" default-value="false"
+ * @parameter property="hibernate.skip" default-value="${maven.test.skip}"
+ * @since 1.0
*/
private boolean skip;
@@ -166,6 +192,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* skip
takes precedence over force
.
*
* @parameter property="hibernate.export.force" default-value="false"
+ * @since 1.0
*/
private boolean force;
@@ -173,6 +200,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* SQL-Driver name.
*
* @parameter property="hibernate.connection.driver_class"
+ * @since 1.0
*/
private String driverClassName;
@@ -180,6 +208,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Database URL.
*
* @parameter property="hibernate.connection.url"
+ * @since 1.0
*/
private String url;
@@ -187,6 +216,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Database username
*
* @parameter property="hibernate.connection.username"
+ * @since 1.0
*/
private String username;
@@ -194,6 +224,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Database password
*
* @parameter property="hibernate.connection.password"
+ * @since 1.0
*/
private String password;
@@ -201,12 +232,15 @@ public class Hbm2DdlMojo extends AbstractMojo
* Hibernate dialect.
*
* @parameter property="hibernate.dialect"
+ * @since 1.0
*/
private String hibernateDialect;
/**
* Hibernate Naming Strategy
+ *
* @parameter property="hibernate.ejb.naming_strategy"
+ * @since 1.0.2
*/
private String hibernateNamingStrategy;
@@ -214,6 +248,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Path to Hibernate configuration file.
*
* @parameter default-value="${project.build.outputDirectory}/hibernate.properties"
+ * @since 1.0
*/
private String hibernateProperties;
@@ -222,6 +257,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Multiple files can be separated with white-spaces and/or commas.
*
* @parameter property="hibernate.mapping"
+ * @since 1.0.2
*/
private String hibernateMapping;
@@ -238,6 +274,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Hibernate-Dialect must always be choosen.
*
* @parameter property="hibernate.export.target" default-value="EXPORT"
+ * @since 1.0
*/
private String target;
@@ -253,6 +290,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* If NONE is choosen, no databaseconnection is needed.
*
* @parameter property="hibernate.export.type" default-value="BOTH"
+ * @since 1.0
*/
private String type;
@@ -260,6 +298,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Output file.
*
* @parameter property="hibernate.export.schema.filename" default-value="${project.build.directory}/schema.sql"
+ * @since 1.0
*/
private String outputFile;
@@ -267,6 +306,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Delimiter in output-file.
*
* @parameter property="hibernate.export.schema.delimiter" default-value=";"
+ * @since 1.0
*/
private String delimiter;
@@ -274,6 +314,7 @@ public class Hbm2DdlMojo extends AbstractMojo
* Format output-file.
*
* @parameter property="hibernate.export.schema.format" default-value="true"
+ * @since 1.0
*/
private boolean format;
@@ -281,9 +322,11 @@ public class Hbm2DdlMojo extends AbstractMojo
* Generate envers schema for auditing tables.
*
* @parameter property="hibernate.export.envers" default-value="false"
+ * @since 1.0.3
*/
private boolean envers;
+
@Override
public void execute()
throws
@@ -381,6 +424,34 @@ public class Hbm2DdlMojo extends AbstractMojo
db.scanArchives(dirUrl);
}
}
+ if (scanDependencies != null)
+ {
+ Matcher matcher = split.matcher(scanDependencies);
+ while (matcher.find())
+ {
+ getLog().info("Scanning dependencies for scope " + matcher.group());
+ for (Artifact artifact : project.getDependencyArtifacts())
+ {
+ if (!artifact.getScope().equalsIgnoreCase(matcher.group()))
+ continue;
+ if (artifact.getFile() == null)
+ {
+ getLog().warn(
+ "Cannot scan dependency " +
+ artifact.getId() +
+ ": no JAR-file available!"
+ );
+ continue;
+ }
+ getLog().info(
+ "Scanning dependency " +
+ artifact.getId() +
+ " for annotated classes..."
+ );
+ db.scanArchives(artifact.getFile().toURI().toURL());
+ }
+ }
+ }
Set