Eclipse类路径和NoClassDefFoundError

Eclipse类路径和NoClassDefFoundError,eclipse,Eclipse,我将尽可能多地提供细节,如果有一些是不相关的,请原谅。 我在eclipse中有两个项目。项目1:com.myworkplace.parent,包中的代码同名。项目2:com.myworkplace.child,包中的代码具有相同的名称(我将代码从默认包移动到该包中,如果这样做会产生差异的话)。据我所知,它们都位于我的工作区文件夹中,并按照您所期望的方式进行结构 我已经使用Java build path->Projects->Add将子元素添加到eclipse中父元素的构建路径中。父级的.clas

我将尽可能多地提供细节,如果有一些是不相关的,请原谅。 我在eclipse中有两个项目。项目1:com.myworkplace.parent,包中的代码同名。项目2:com.myworkplace.child,包中的代码具有相同的名称(我将代码从默认包移动到该包中,如果这样做会产生差异的话)。据我所知,它们都位于我的工作区文件夹中,并按照您所期望的方式进行结构

我已经使用Java build path->Projects->Add将子元素添加到eclipse中父元素的构建路径中。父级的.classpath文件包含以下条目:

    <classpathentry combineaccessrules="false" kind="src" path="/com.myworkplace.child"/>
有什么好处


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

如果您的代码在应用程序服务器上运行,您需要为该应用程序服务器正确配置类路径


为此,请找到服务器选项卡,双击它,然后在主编辑区域中显示的新选项卡中单击打开启动配置,单击类路径选项卡并确保其中的类路径正确。

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


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

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

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


(注意:只有在调用IWorkbenchConfigure.setSaveAndRestore方法并传递布尔值“true”时,这才适用——这意味着您的应用程序将在关闭应用程序并随后重新启动后保存和恢复各种rcp设置。)

这是正确的。如果在这之后不起作用,右键单击导航器中的项目,然后选择“更新类路径”选项。儿童与RCP无关,也与RCP无关。所以我不能通过必要的插件添加它。奇怪的是,它也从可以导入的包列表中丢失了。我通过一种方法成功地运行了这个应用程序,没有任何错误:将子对象导出为jar,并将其添加到插件属性的运行时选项卡下。丑陋的。无论如何,这是一个足够好的答案被接受。@ JSN只是一个友好的建议,在不知道你的情况的细节的情况下考虑一些事情:你应该考虑将子项目转换为插件。唯一的区别是添加了一个META-INF/manifest.mf文件(或者如果您已经有了一些OSGi特定的条目,则向该文件添加一些OSGi特定的条目)。子项目仍然可以作为独立(非OSGi)jar文件完全用于其他用途,并且它将与父RCP应用程序进行更优雅的集成。感谢您的建议,我将查看它。
java.lang.NoClassDefFoundError: com/myworkplace/child/Child