Google App Engine JDO增强功能失败

时间:2013-01-28 02:49:19

标签: java google-app-engine ant jdo datanucleus

我正在尝试构建我的第一个Google App Engine WAR,并且我正在设置我自己的外部(Eclipse之外)Ant构建,以便从终端执行。我正试图让<enhance_war/> Ant宏工作,并且遇到了一个奇怪的NoSuchMethodError

这是我的Ant目标:

<target name="package" depends="gendocs">
    <echo message="Enhancing WAR JDO classes." />
    <enhance_war war="war" />

    <echo message="Packaging the WAR file." />
    <war destfile="gen/dist/myapp.war" webxml="war/web.xml">
        <fileset dir="war">
            <includes name="**/*.xml" />
        </fileset>
        <lib dir="war/WEB-INF/lib" />
        <classes dir="war/WEB-INF/classes" />
    </war>
</target>

这是尝试执行package目标时的Ant输出:

package:
     [echo] Enhancing WAR JDO classes.
  [enhance] Encountered a problem: Unexpected exception
  [enhance] Please see the logs [/tmp/enhance4426322586552955387.log] for further information.

BUILD FAILED
/home/myuser/sandbox/workbench/eclipse/workspace/myapp/build/build-local.xml:193: The following error occurred while executing this line:
/home/myuser/sandbox/workbench/google/gae-sdk/1.7.1/appengine-java-sdk-1.7.1/config/user/ant-macros.xml:95: Java returned: 1

ant-macros.xml:95对应于以下行:

<enhance failonerror="true" api="@{api}">
    <!-- Rest of the enhance task def -->
</enhance>

执行此<enhance />任务时出现问题,但我无法弄清楚是什么。

最后是/tmp/enhance4426322586552955387.log的日志文件:

java.lang.RuntimeException: Unexpected exception
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:76)
    at com.google.appengine.tools.enhancer.Enhance.<init>(Enhance.java:71)
    at com.google.appengine.tools.enhancer.Enhance.main(Enhance.java:51)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.appengine.tools.enhancer.Enhancer.execute(Enhancer.java:74)
    ... 2 more
Caused by: java.lang.NoSuchMethodError: org.datanucleus.plugin.PluginManager.<init>(Lorg/datanucleus/PersistenceConfiguration;Lorg/datanucleus/ClassLoaderResolver;)V
    at org.datanucleus.OMFContext.<init>(OMFContext.java:159)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:172)
    at org.datanucleus.enhancer.DataNucleusEnhancer.<init>(DataNucleusEnhancer.java:150)
    at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1157)
    ... 7 more

这里发生了什么?我不认为这是一个类路径问题,因为org.datanucleus.plugin.PluginManager类是在datanucleus-core-1.1.5.jar内定义的,我绝对在构建类路径上。加上它NoSuchMethodError,所以它让我觉得我有一个JAR地狱/版本问题正在进行中。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的类路径中有一个不同版本的datanucleus-core,以达到增强器所需的版本。验证增强程序正在使用的内容并进行修复。有关可能性要求,请参阅http://code.google.com/p/datanucleus-appengine/wiki/Compatibility

最新的GAE SDK提供了“GAE JDO插件”v2.1.1 IIRC,这是最新版本(虽然最近还没有发布fwiw),它存在于lib / opt / blahblahblah下。这使用了DataNucleus v3.1.x.这是人们被推荐反对的。 GAE JDO插件是在http://code.google.com/p/datanucleus-appengine/

开发的