import org.apache.maven.project.MavenProject;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.NamingStrategy;
-import org.hibernate.envers.configuration.AuditConfiguration;
+import org.hibernate.envers.configuration.spi.AuditConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.hbm2ddl.SchemaExport.Type;
import org.hibernate.tool.hbm2ddl.Target;
public final static String NAMING_STRATEGY="hibernate.ejb.naming_strategy";
public final static String ENVERS = "hibernate.export.envers";
- public final static String MD5S = "schema.md5s";
+ public final static String MD5S = "hibernate4-generatedschema.md5s";
private final static Pattern split = Pattern.compile("[^,\\s]+");
* Classes-Directory to scan.
* <p>
* This parameter defaults to the maven build-output-directory for classes.
- * Additonally, all dependencies are scanned for annotated classes.
+ * Additionally, all dependencies are scanned for annotated classes.
*
* @parameter property="project.build.outputDirectory"
* @since 1.0
private String outputDirectory;
/**
- * Wether to scan test-classes too, or not.
+ * Whether to scan test-classes too, or not.
* <p>
* If this parameter is set to <code>true</code> the test-classes of the
* artifact will be scanned for hibernate-annotated classes additionally.
* <p>
* If set to <code>true</code>, the execution is skipped.
* <p>
- * A skipped excecution is signaled via the maven-property
+ * A skipped execution is signaled via the maven-property
* <code>${hibernate.export.skipped}</code>.
* <p>
- * The excecution is skipped automatically, if no modified or newly added
+ * The execution is skipped automatically, if no modified or newly added
* annotated classes are found and the dialect was not changed.
*
- * @parameter property="maven.test.skip" default-value="false"
+ * @parameter property="hibernate.skip" default-value="${maven.test.skip}"
* @since 1.0
*/
private boolean skip;
/**
* Target of execution:
* <ul>
- * <li><strong>NONE</strong> only export schema to SQL-script (forces excecution, signals skip)</li>
- * <li><strong>EXPORT</strong> create database (<strong>DEFAULT!</strong>). forces excecution, signals skip)</li>
+ * <li><strong>NONE</strong> only export schema to SQL-script (forces execution, signals skip)</li>
+ * <li><strong>EXPORT</strong> create database (<strong>DEFAULT!</strong>). forces execution, signals skip)</li>
* <li><strong>SCRIPT</strong> export schema to SQL-script and print it to STDOUT</li>
* <li><strong>BOTH</strong></li>
* </ul>
*
- * A databaseconnection is only needed for EXPORT and BOTH, but a
- * Hibernate-Dialect must always be choosen.
+ * A database connection is only needed for EXPORT and BOTH, but a
+ * Hibernate-Dialect must always be chosen.
*
* @parameter property="hibernate.export.target" default-value="EXPORT"
* @since 1.0
{
if (skip)
{
- getLog().info("Exectuion of hibernate4-maven-plugin:export was skipped!");
+ getLog().info("Execution of hibernate4-maven-plugin:export was skipped!");
project.getProperties().setProperty(EXPORT_SKIPPED_PROPERTY, "true");
return;
}
boolean modified = false;
File saved = new File(buildDirectory + File.separator + MD5S);
- if (saved.exists())
+ if (saved.isFile() && saved.length() > 0)
{
try
{
throw new MojoExecutionException(e.getMessage());
}
- /** Overwrite values from propertie-file or set, if given */
+ /** Overwrite values from properties-file or set, if given */
if (driverClassName != null)
{
if (properties.containsKey(DRIVER_CLASS))
if (properties.isEmpty())
{
getLog().error("No properties set!");
- throw new MojoFailureException("Hibernate-Configuration is missing!");
+ throw new MojoFailureException("Hibernate configuration is missing!");
}
- Configuration config = new Configuration();
+ final Configuration config = new ValidationConfiguration(hibernateDialect);
+
config.setProperties(properties);
if ( properties.containsKey(NAMING_STRATEGY))
}
catch (NoSuchAlgorithmException e)
{
- throw new MojoFailureException("Cannot calculate MD5-summs!", e);
+ throw new MojoFailureException("Cannot calculate MD5 sums!", e);
}
catch (FileNotFoundException e)
{
- throw new MojoFailureException("Cannot calculate MD5-summs!", e);
+ throw new MojoFailureException("Cannot calculate MD5 sums!", e);
}
catch (IOException e)
{
- throw new MojoFailureException("Cannot calculate MD5-summs!", e);
+ throw new MojoFailureException("Cannot calculate MD5 sums!", e);
}
}
}
SchemaExport export = new SchemaExport(config, connection);
- export.setOutputFile(outputFile);
export.setDelimiter(delimiter);
export.setFormat(format);
+
+ File outF = new File(outputFile);
+
+ if (!outF.isAbsolute())
+ {
+ // Interpret relative file path relative to build directory
+ outF = new File(buildDirectory, outputFile);
+ getLog().info("Adjusted relative path, resulting path is " + outF.getPath());
+ }
+
+ // Ensure that directory path for specified file exists
+ File outFileParentDir = outF.getParentFile();
+ if (null != outFileParentDir && !outFileParentDir.exists())
+ {
+ try
+ {
+ getLog().info("Creating directory path for output file:" + outFileParentDir.getPath());
+ outFileParentDir.mkdirs();
+ }
+ catch (Exception e)
+ {
+ getLog().error("Error creating directory path for output file: " + e.getLocalizedMessage());
+ }
+ }
+
+ export.setOutputFile(outF.getPath());
export.execute(target, type);
for (Object exception : export.getExceptions())