NoClassDefFoundError虽然有OSGi包

时间:2011-07-20 15:44:45

标签: java osgi equinox

尝试在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时,我发现bundle包含所需的Class。

我使用了监视工具来确保捆绑包正在运行。

可能是什么问题?

问候?

3 个答案:

答案 0 :(得分:4)

根据您所写的内容,您将导入包 com.springsource.org.apache.commons.collections ,但这是一个Spring构建的 org.apache的OSGi版本。 commons.collections jar文件。它是一个捆绑,而不是包。

您的捆绑包必须导入 org.apache.commons.collections ,这是由 com.springsource.org.apache.commons.collections 捆绑包提供的。假设您已经将Spring包提供给运行时,您只需要修复import语句。

在现有的清单中,更改(在“导入 - 包”部分下):

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

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

答案 1 :(得分:2)

您的软件包无法导入软件包com.springsource.org.apache.commons.collections,因为没有此类软件包。您可能意味着您已使用该名称安装捆绑包

错误表示您的软件包不会导入软件包org.apache.commons.collections,即它必须出现在软件包的Import-Package语句中的某个位置。

答案 2 :(得分:-1)

将commons-collections jar文件添加到构建路径将解决此问题。

相关问题