如何在eclipse rcp构建中解决ClassNotFoundException?

时间:2012-07-19 17:43:47

标签: eclipse-juno

我已经在eclipse juno中构建了一个eclipse功能项目,当我从IDE启动程序时,一切都很好,控制台中没有错误。

当我导出它运行的产品时,它不显示我在Application.e4xmi文件中创建的部件的内容(仅灰色背景)。当我检查导出文件夹中的配置文件夹时,会出现一个包含以下错误的日志文件:

!ENTRY org.eclipse.e4.ui.workbench 4 0 2012-07-19 19:22:13.859
MESSAGE Unable to load class 'be.yt.diepvriezer.ui.handlers.ExitHandler' from bundle '2'
  

!ENTRY org.eclipse.e4.ui.workbench 4 0 2012-07-19 19:22:13.859   !MESSAGE无法从包'2'加载类'be.yt.diepvriezer.ui.handlers.ExitHandler'   !堆栈0   java.lang.ClassNotFoundException:be.yt.diepvriezer.ui.handlers.ExitHandler       在org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501)       在org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)       在org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)       在org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)       at java.lang.ClassLoader.loadClass(ClassLoader.java:247)   .....

依旧是我在应用程序模型中创建的每个处理程序和部分。

我检查了build.properties和manifest文件,一切都在那里。

有人能指出我正确的方向如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

有时您需要使用“-clean”启动应用程序,或者定义“osgi.clean = true”以确保清除缓存的依赖项。在干净的工作区中启动将产生相同的效果(没有缓存值):

“OSGi框架和eclipse运行时使用的任何缓存数据都将被清除。这将清除用于存储bundle依赖项解析和eclipse扩展注册表数据的缓存。使用此选项将强制eclipse重新初始化这些缓存。”< / p>

更多信息here

答案 1 :(得分:0)

没有解决方案,只需检查一下:

当您查看导出产品的plugins/子目录时,它是否包含be.yt.diepvriezer.ui.handlers.ExitHandler的插件? 如果没有,则需要将该插件添加到产品中。当您从IDE中启动RCP产品时,通常会包含工作区中的所有插件,但是当您导出产品时,您确实需要列出您真正想要包含在*.product文件中的所有插件(直接或通过*.feature s)

当您解压缩该插件jar文件时,...ExitHandler类真的在那里吗?如果没有,产品导出失败。

Application.e4xmi是否与代码在同一个插件中引用了您的..ExitHandler?如果没有,那么包含..ExitHandler的插件的类加载器无法访问提供Application.e4xmi的“其他”插件中的代码。