带有Spring Roo的Google App Engine

时间:2012-06-28 15:56:19

标签: google-app-engine spring-roo

这是我正在运行的Roo脚本。在终端和STS中使用shell中的spring-roo-1.2.2.RELEASE版本。

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

我没有对项目进行任何手动更改,但执行测试失败并显示以下消息:

[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

我在类路径上看到datanucleus-enhancer-3.0.1.jar,但我认为插件正在下载datanucleus-enhancer-3.1.0-m1.jar。有没有人知道这个问题的解决方案或解决方法?

2 个答案:

答案 0 :(得分:2)

可以通过在maven-datanucleus-pluginpom.xml的依赖项下添加以下内容,手动指定datanucleus enhancer插件版本来解决此问题。

<dependency>
 <groupId>org.datanucleus</groupId>
 <artifactId>datanucleus-enhancer</artifactId>
 <version>3.1.0-m2</version>
</dependency>

最终的maven-dataanucleus-plugin配置一旦添加就会如下所示。

<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>

干杯。

答案 1 :(得分:1)

我通过将“运行时”的范围添加到datanucleus-core maven依赖关系来纠正这个问题。