Eclipse classpath和NoClassDefFoundError

时间:2010-02-24 20:35:28

标签: eclipse

我会尽量在这里提供尽可能详细的信息,请原谅我,如果有些不相关的话。 我在eclipse中有两个项目。项目1:com.myworkplace.parent,包含相同名称的代码。项目2:com.myworkplace.child,包含相同名称的代码(我将代码移到默认包中的代码中,如果这有所不同)。据我所知,两者都位于我的工作区文件夹中,并按照您期望的方式进行结构化。

我使用Java Build Path将子项添加到eclipse中父项的构建路径 - >项目 - >加。 Parent的.classpath文件包含条目:

    <classpathentry combineaccessrules="false" kind="src" path="/com.myworkplace.child"/>

我在父级中添加对com.myworkplace.child.Child类的引用,导入它,编译它没有错误,运行并获取:

java.lang.NoClassDefFoundError: com/myworkplace/child/Child

是什么给出了?

编辑:父应用程序是一个RCP应用程序,也许是OSGI(我真的不太了解RCP和相关的东西。)一些谷歌搜索让我相信它可能与此有关。

3 个答案:

答案 0 :(得分:6)

由于您的应用程序是RCP应用程序,因此编辑代码时使用的eclipse类路径与运行时使用的OSGi类路径之间存在差异。听起来你需要将com.myworkplace.child插件添加到com.myworkplace.parent插件的依赖项列表中。

在父项目中打开plugin.xml或META-INF / manifest.mf。 Eclipse应该打开PDE插件编辑器(基础配置文件的基于表单的编辑器)。单击底部的Dependencies选项卡,将您的子插件添加到表单左侧的“Required Plug-ins”列表中。或者,您可以将com.myworkplace.child包添加到右侧的“Imported Package”列表中。两者之间的区别超出了这个答案的范围,但是你可以在日食文档中读到这一点,因为你(希望)正朝着正确的方向前进。

答案 1 :(得分:2)

我们发现即使在eclipse rcp项目中做了所有正确的事情,我们仍然会遇到这样的错误。解决方案是删除应用程序的工作区目录(默认情况下,它会在.eclipse下存储工作区设置,但我们已经调整了我们的代码以使用另一个与其他日食不共享的目录)。

当我们在重建后删除此目录时,我们的应用程序正常运行。显然它以某种方式存储类路径以及其他设置,但我们没有调查确切的细节。

(注意:仅当您调用IWorkbenchConfigurer.setSaveAndRestore方法传递布尔值'true'时才适用 - 这意味着您的应用程序将在关闭应用程序并随后重新启动后保存并恢复各种rcp设置。 )

答案 2 :(得分:0)

如果您的代码在应用程序服务器中运行,则需要为该应用程序服务器正确配置Classpath。

为此,找到“服务器”选项卡,双击它,在主编辑区域中出现的新选项卡中单击“打开启动配置”,单击“类路径”选项卡,确保其中的类路径正确。