Here is the Roo script that I am running. Using version spring-roo-1.2.2.RELEASE from the shell both in terminal and in STS.
persistence setup --provider DATANUCLEUS --database GOOGLE_APP_ENGINE --applicationId roo-gae
entity jpa --class ~.domain.Wheel --testAutomatically
field string --fieldName code --notNull --unique
entity jpa --class ~.domain.Car --testAutomatically
field string --fieldName name --notNull --unique
field string --fieldName color --notNull
field reference --fieldName wheel --type ~.domain.Wheel --notNull
perform tests
I don't make any manual changes to the project, but the perform tests fails with this message:
[ERROR] Failed to execute goal org.datanucleus:maven-datanucleus-plugin:3.0.2:enhance (default) on project test: Error executing DataNucleus tool org.datanucleus.enhancer.DataNucleusEnhancer: InvocationTargetException: Plugin (Bundle) "org.datanucleus.enhancer" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/home/timh/.m2/repository/org/datanucleus/datanucleus-enhancer/3.1.0-m1/datanucleus-enhancer-3.1.0-m1.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/home/timh/.m2/repository/org/datanucleus/datanucleus-enhancer/3.0.1/datanucleus-enhancer-3.0.1.jar." -> [Help 1]
[ERROR] .Car roo>
[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] .Car roo>
[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/MojoExecutionException
I see datanucleus-enhancer-3.0.1.jar on the classpath but I think that datanucleus-enhancer-3.1.0-m1.jar is being downloaded by the plugin. Does anyone know a solution or a workaround to this issue?
This can be corrected by manually specifying the datanucleus enhancer plugin version by adding the following under the dependencies for the maven-datanucleus-plugin
in your pom.xml
.
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-enhancer</artifactId>
<version>3.1.0-m2</version>
</dependency>
Your final maven-dataanucleus-plugin configuration can appear like below once its added.
<plugin>
<groupId>org.datanucleus</groupId>
<artifactId>maven-datanucleus-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<fork>false</fork>
<log4jConfiguration>${basedir}/src/main/resources/log4j.properties</log4jConfiguration>
<mappingIncludes>**/*.class</mappingIncludes>
<verbose>true</verbose>
<enhancerName>ASM</enhancerName>
<api>JPA</api>
<mappingExcludes>**/CustomRequestFactoryServlet.class, **/GaeAuthFilter.class</mappingExcludes>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>3.0.10</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-enhancer</artifactId>
<version>3.1.0-m2</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jpa</artifactId>
<version>3.0.9</version>
</dependency>
</dependencies>
</plugin>
Cheers.