5

Eclipse Equinox で grails アプリケーションを実行しようとすると、実行時エラーが発生します。

java.lang.NoClassDefFoundError: org/apache/commons/collections/Transformer

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)

at java.lang.ClassLoader.defineClass(ClassLoader.java:616)

at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)

at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:580)

at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)

at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)

at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)

at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)

at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)

at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)

at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)

at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)

at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)

at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

問題は、バンドルが次のパッケージをインポートしていることcom.springsource.org.apache.commons.collections; version="3.2.1" です。Spring EBR を検索すると、バンドルに必要なクラスが含まれていることがわかりました。

監視ツールを使用して、バンドルが実行されていることを確認しました。

何が問題になる可能性がありますか?

よろしく ?

4

3 に答える 3

4

あなたが書いたことに基づいて、パッケージcom.springsource.org.apache.commons.collectionsをインポートしていますが、これはorg.apache.commons.collections jar ファイルの Spring ビルド OSGi バージョンです。パッケージではなくバンドルです。

バンドルは、 com.springsource.org.apache.commons.collectionsバンドルによって提供されるorg.apache.commons.collectionsをインポートする必要があります。既に Spring バンドルをランタイムに提供していると仮定すると、インポート ステートメントを修正するだけで済みます。

既存のマニフェストで、変更します (Import-Package セクションの下):

com.springsource.org.apache.commons.collections;version="3.2.1"

org.apache.commons.collections;version="3.2.1"
于 2011-07-20T16:41:28.740 に答える
2

そのようなパッケージがないため、バンドルはパッケージをインポートできませんcom.springsource.org.apache.commons.collections。おそらく、その名前のバンドルをインストールしたということです。

このエラーは、バンドルがパッケージをインポートしていないことを意味します。つまり、バンドルのステートメントのorg.apache.commons.collectionsどこかに表示される必要があります。Import-Package

于 2011-07-20T17:30:30.793 に答える
-1

commons-collections jar ファイルをビルド パスに追加すると、この問題が解決します。

于 2011-07-20T16:49:04.037 に答える