2011-07-20 116 views
4

尝试在Eclipse Equinox上运行grails应用程序时出现运行时错误。NoClassDefFoundError尽管OSGi包存在

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" 当搜索春天EBR我发现,套装中包含了所需的类。

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

可能是什么问题?

问候?

+0

您是否已将Spring集合包安装到您的OSGi运行时? – JustinKSU

+0

你有包名吗?我已经安装了很多东西,但我不确定。 –

回答

4

根据你写的,你导入的包com.springsource.org.apache.commons.collections,但那是org.apache.commons.collections jar文件的AA春建OSGi的版本。这是一个捆绑包,而不是一个包。

你的捆绑将不得不进口org.apache.commons.collections,这是由com.springsource.org.apache.commons.collections捆绑提供。假设你已经向运行时提供了Spring bundle,你只需要修改import语句。

在您现有的清单,变化(根据您的导入-Package部分):

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

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

在我的清单中,我在import语句com.springsource.org.apache.commons.collections; version = “3.2.1”中有这个。我安装了我从Spring EBR –

+0

得到的jar文件@Houcem - 这是你的问题,导入应该如我在我的答案中所述。 – Robin

-1

添加公地集合jar文件到您的构建路径将解决这个问题。

+0

我已经添加了它。但是类加载器从OSGi上的捆绑包中查找类,而不是从lib目录中的文件中查找 –

2

您的包不能导入包com.springsource.org.apache.commons.collections,因为没有这样的包。您可能的意思是,您已经使用该名称安装了软件包

此错误意味着您的包不会导入包org.apache.commons.collections,即它必须出现在您的包的Import-Package声明中的某处。

+0

它出现在导入包中。我在运行时遇到这个错误,而不是在安装我的包时。 –

+0

当然;安装捆绑软件时不可能出现这样的错误。嗯,如果软件包确实出现在你的'Import-Package'语句中,那么NCDFE *就不应该出现。是否有可能另一个包实际上抛出这个错误,即不是你认为的错误? –

相关问题