0

Google AppEngine と Spring MVC を使用して Web アプリを作成しています。次の手順に従って、DataNucleus プラグインの v2 に慎重にアップグレードしました: http://code.google.com/p/datanucleus-appengine/wiki/UpgradingToVersionTwo (私は Eclipse を使用しています)。

Enhancer Tool を実行しようとすると、次のエラーが表示されます。

Exception in thread "main" Plugin (Bundle) "org.datanucleus" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL 
"file:/.../eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37/appengine-java-sdk-1.6.4/lib/opt/user/datanucleus/v2/datanucleus-core-3.0.6.jar" is already registered, and you are trying to register an identical plugin located at URL 
"file:/.../eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.6.4.v201203300216r37/appengine-java-sdk-1.6.4/lib/opt/tools/datanucleus/v2/datanucleus-core-3.0.6.jar."

小さな違いがわかるようにメッセージをフォーマットしました。1 つの jar は「user」ディレクトリからロードされ、もう 1 つは「tools」ディレクトリからロードされます。理由がわかりません。プロジェクトのビルド パスには、「ユーザー」からのものだけがあり、DataNucleus 構成には、上記のハウツーのように「ツール」からのものを追加しました。

私が見た他のケースでは、このメッセージは主に datanucleus プラグインの競合するバージョンが原因でしたが、私には当てはまりません。私の場合はちょっとばかげていると思います...だから、何が間違っているのですか?

4

1 に答える 1

0

結局、説明書を思ったほど注意深く読んでいませんでした。問題は、実際には jar がプロジェクトのビルド パスに 1 つ、datanucleus 構成に 1 つ、2 回存在していたことです。それはプロジェクトのビルド パスにあるべきではありません (実際には、それらの 1 つにあるべきではありません。どちらであってもかまいません)。libs を war ディレクトリにコピーしたときに、そこに自動的に追加しました。しかし、手順には、jdo-api のみがプロジェクトのビルド パスにある必要があることが明確に示されています。

一つ、わからないことがあります。手順の 1 つのステップで、DataNuclues 構成で「ツールの実行時にプロジェクト クラスパスを使用する」のチェックを外す必要がありました。では、プラグインがプロジェクトのビルド パスで構成されたライブラリをまだ使用していた可能性はありますか?

于 2012-08-03T08:42:26.373 に答える