X-Git-Url: https://juplo.de/gitweb/?p=hibernate4-maven-plugin;a=blobdiff_plain;f=src%2Fsite%2Fxhtml%2Fpitfalls.xhtml;h=07438808fabacb653e5a5d134640fc3349f494af;hp=9b868001aa6c16b811c727f264ce8764d7fd2044;hb=298c7a2b0c0552973ce018cb313de6bab60b2fc2;hpb=347236c3cea0f204cefd860c605d9f086e674e8b diff --git a/src/site/xhtml/pitfalls.xhtml b/src/site/xhtml/pitfalls.xhtml index 9b868001..07438808 100644 --- a/src/site/xhtml/pitfalls.xhtml +++ b/src/site/xhtml/pitfalls.xhtml @@ -4,30 +4,36 @@ +

Known Pitfalls (FAQ)

Annotated classes in dependencies are not found.

- hibernate4-maven-plugin by default scans dependencies in the scope + hibernate-maven-plugin by default scans dependencies in the scope compile. You can configure it to scan dependencies in other scopes as well. But it scans only direct dependencies. Transitive dependencies are not scanned for annotated classes. If some of your annotated classes are hidden in a transitive dependency, you can simply add that dependency explicitly.

-

hibernate4-maven-plugin always needs a database-connection

+

hibernate-maven-plugin always needs a database-connection

- The default-configuration uses the EXPORT-target of the SchemaExport-Tool. - If you do not need to create a database with the evaluated schema, you can - use the NONE- or the SCRIPT-target. + The default-configuration executes the created SQL. + Therefore, it needs a valid database-connection and fails, if none is + available. + If you do not need the generated SQL to be executed automatically, + you can set the property hibernate.schema.execute to + false. This can be achieved with the command-line parameter - -Dhibernate.export.target=SCRIPT or with the following configuration: + -Dhibernate.schema.execute=false or with the following + configuration:

 <configuration>
-  <target>SCRIPT</target>
+  <execute>false</execute>
 </configuration>

But even when no database is to be created, hibernate always needs to know - the dialect. Hence, the plugin will fail if this parameter is missing! + the dialect. Hence, the plugin will still fail, if this parameter is also + missing!

Dependency for driver-class XYZ is missing

@@ -36,7 +42,7 @@ So a tidy maven-developer would usually scope it for runtime.

- But this will break the execution of the hibernate4-maven-plugin. + But this will break the execution of the hibernate-maven-plugin. Since it will not be able to see the needed dependency, it will fail with an error-message like:

@@ -44,21 +50,32 @@ [INFO] Gathered hibernate-configuration (turn on debugging for details): [INFO] hibernate.connection.username = sa [INFO] hibernate.connection.password = -[INFO] hibernate.dialect = org.hibernate.dialect.HSQLDialect -[INFO] hibernate.connection.url = jdbc:hsqldb:/home/kai/mmf/target/mmf;shutdown=true -[INFO] hibernate.connection.driver_class = org.hsqldb.jdbcDriver -[ERROR] Dependency for driver-class org.hsqldb.jdbcDriver is missing! +[INFO] hibernate.dialect = org.hibernate.dialect.H2Dialect +[INFO] hibernate.connection.url = jdbc:h2:file:./db +[INFO] hibernate.hbm2dll.create_namespaces = false +[INFO] hibernate.connection.driver_class = org.h2.Driver +[INFO] hibernate.format_sql = true +[INFO] HHH000412: Hibernate Core {5.0.2.Final} +[INFO] HHH000206: hibernate.properties not found +[INFO] HHH000021: Bytecode provider name : javassist +[INFO] Adding /home/kai/project/target/classes to the list of roots to scan... +[INFO] Adding dependencies from scope compile to the list of roots to scan +[INFO] Adding dependencies from scope org.hibernate:hibernate-core:jar:4.3.0.Final to the list of roots to scan +[INFO] Adding annotated resource: de.juplo.tests.SimplestMavenHib4Test [INFO] ------------------------------------------------------------------------ -[ERROR] BUILD ERROR +[INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ -[INFO] org.hsqldb.jdbcDriver +[INFO] Total time: 1.760s +[INFO] Finished at: Mon Mar 07 19:06:54 CET 2016 +[INFO] Final Memory: 11M/215M [INFO] ------------------------------------------------------------------------ -[INFO] For more information, run Maven with the -e switch -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 2 seconds -[INFO] Finished at: Thu Nov 29 11:31:14 CET 2012 -[INFO] Final Memory: 32M/342M -[INFO] ------------------------------------------------------------------------ +[ERROR] Failed to execute goal de.juplo:hibernate-maven-plugin:${project.version}:drop (default) on project hibernate4-properties-test: Could not open the JDBC-connection: Unable to load class [org.h2.Driver]: Could not load requested class : org.h2.Driver -> [Help 1] +[ERROR] +[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. +[ERROR] Re-run Maven using the -X switch to enable full debug logging. +[ERROR] +[ERROR] For more information about the errors and possible solutions, please read the following articles: +[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

A quick workaround for this error would be, to delete the runtime-constraint for the jdbc-driver-dependency. @@ -70,12 +87,13 @@

 <plugin>
   <groupId>de.juplo</groupId>
-  <artifactId>hibernate4-maven-plugin</artifactId>
+  <artifactId>hibernate-maven-plugin</artifactId>
   <version>${project.version}</version>
   <executions>
     <execution>
       <goals>
-        <goal>export</goal>
+        <goal>drop</goal>
+        <goal>create</goal>
       </goals>
     </execution>
   </executions>
@@ -93,42 +111,42 @@
   Because otherwise, this dependency will unnecessarily bloat the
   runtime-dependencies of your project.
   

-

DBUnit fails after execution of hibernate4 was skipped because nothing has changed

+

DBUnit fails after execution of hibernate was skipped because nothing has changed

- If hibernate4-maven-plugin skips its excecution, this may lead to errors in + If hibernate-maven-plugin skips its excecution, this may lead to errors in other plugins. For example, when importing sample-data in the automatically created database with the help of the dbunit-plugin, the CLEAN_INSERT-operation may fail because of foreign-key-constraints, - if the database was not recreated, because the hibernate4-maven-plugin has + if the database was not recreated, because the hibernate-maven-plugin has skipped its excecution.

A quick fix to this problem is, to force - hibernate4-maven-plugin to export the schema every time it is running. + hibernate-maven-plugin to generate and execute the SQL every time it is running. But to recreate the database on every testrun may noticeable slow down your development cycle, if you have to wait for slow IO.

- To circumvent this problem, hibernate4-maven-plugin signals a skipped - excecution by setting the maven property $\{hibernate.export.skipped\} to + To circumvent this problem, hibernate-maven-plugin signals a skipped + excecution by setting the maven property ${hibernate.schema.skipped} to true. You can configure other plugins to react on this signal. For example, the dbunit-plugin can be configured to skip its excecution, if - hibernate4-maven-plugin was skipped like this: + hibernate-maven-plugin was skipped like this:

 <plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>dbunit-maven-plugin</artifactId>
   <configuration>
-    <skip>${hibernate.export.skipped}</skip>
+    <skip>${hibernate.schema.skipped}</skip>
   </configuration>
 </plugin>

The database will not be recreated after a manual drop/clean

If one manually drops the database or removes the hsqldb-files, it will not - be recreated by the hibernate4-maven-plugin, because it cannot detect, that + be recreated by the hibernate-maven-plugin, because it cannot detect, that the database needs to be recreated. This happens, because the plugin will not recreate the database if neither the configuration nor the annotated classes have changed, because an @@ -143,17 +161,17 @@ Otherwise the recreation must be forced:

-mvn hibernate4:export -Dhibernate.export.force=true
-

The hibernate4:export goal is not executed, when tests are skipped

+mvn hibernate:create -Dhibernate.schema.force=true
+

The hibernate:create goal is not executed, when tests are skipped

- The hibernate4-maven-plugin automatically skips its execution, when + The hibernate-maven-plugin automatically skips its execution, when maven.test.skip is set to true. If you need it to be always executed, you can configure that explicitly like this:

 <plugin>
   <groupId>de.juplo</groupId>
-  <artifactId>hibernate4-maven-plugin</artifactId>
+  <artifactId>hibernate-maven-plugin</artifactId>
   ...
   <configuration>
     <skip>false</skip>
@@ -166,14 +184,14 @@ mvn hibernate4:export -Dhibernate.export.force=true

I do not want my dependencies to be scanned for hibernate annotations

If you do not want your dependencies to be scanned for hibernate annotations, - you can pass -Dhibernate.export.scan_dependencies=none to maven + you can pass -Dhibernate.schema.scan.dependencies=none to maven or set scanDependencies to none in the configuration of the plugin like this:

 <plugin>
   <groupId>de.juplo</groupId>
-  <artifactId>hibernate4-maven-plugin</artifactId>
+  <artifactId>hibernate-maven-plugin</artifactId>
   ...
   <configuration>
     <scanDependencies>none</scanDependencies>
@@ -184,20 +202,50 @@ mvn hibernate4:export -Dhibernate.export.force=true
If you are working under Windows and get the error-message No annotated classes found in directory C:\projects\X Y Z\path-to-project\target\classes, but you are really sure, that there are annotated classes in that - directory, you should try to rename your folders, so that their names - do not contain any whitespaces. -

-

- So fare, I got to bug-reports considering this. - In both cases, removing all whitespaces from the path solved the error. - In both cases, I was not able to reproduce the bug on my development - system, which is running under linux. + directory, you are expiriencing a bug, in the scannotation-library, that + was closed in version 1.1.0 of the hibernate-maven-plugin.

- Hence, I assume, this is a sublte bug in the way, the java-version for - Windows is handling paths, that contain whitespaces. + You should consider to upgrade to the latest version of the plugin.

+

If two goals are specified, the second one is always skipped

+

+ If you specify two goals, for example drop and + create, each goal has to be specified in its own + execution, so that you can specify two different + output-files for the two goals. + Otherwise, both goals will use the same output-file and the goal, that + is run second, will always skip, becaus it will find, that the output + file already exists and conclude, that its work was already done in a + prior run. +

+

+ Example configuration for two goals: +

+
+<executions>
+  <execution>
+    <id>Create Drop-Schema</id>
+    <phase>test-compile</phase>
+    <goals>
+      <goal>drop</goal>
+    </goals>
+    <configuration>
+      <outputFile>db-schema/drop-schema.ddl</outputFile>
+    </configuration>
+  </execution>
+  <execution>
+    <id>Create Create-Schema</id>
+    <phase>test-compile</phase>
+    <goals>
+      <goal>create</goal>
+    </goals>
+    <configuration>
+      <outputFile>db-schema/create-schema.ddl</outputFile>
+    </configuration>
+  </execution>
+</executions>