3

私は最初の 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

何が起きてる?クラスは の内部で定義されているため、クラスパスの問題ではないと思います。これは、ビルド クラスパス上に絶対に存在します。さらに、そのため、JAR地獄/バージョン管理の問題が発生しているように感じます。何か案は?org.datanucleus.plugin.PluginManagerdatanucleus-core-1.1.5.jarNoSuchMethodError

4

1 に答える 1

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/で開発されています。

于 2013-01-28T15:57:29.847 に答える