2012-07-19 82 views
2

我在eclipse juno中构建了一个eclipse特性项目,当我从IDE启动程序时,一切正常,控制台中没有错误。如何在eclipse rcp build中解决ClassNotFoundException?

当我导出产品时,它运行但它不显示我在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无法从bundle'2'加载类'be.yt.diepvriezer.ui.handlers.ExitHandler' !STACK 0 java.lang.ClassNotFoundException:be.yt.diepvriezer.ui.handlers.ExitHandler at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:501) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) at org.eclipse.osgi。在在java.lang.ClassLoader.loadClass中使用org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) (ClassLoader.java: 247) .....

对于我在应用程序模型中创建的每个处理程序和部分都是如此。

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

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

回答

0

没有解决,只是需要检查的事项:

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

当你解压缩插件jar文件时,...ExitHandler类真的在那里吗?如果不是,则产品出口中的某些内容失败。

Application.e4xmi是指代码..ExitHandler与代码相同的插件吗?如果不是,则包含Application.e4xmi的插件的类加载器无法访问提供..ExitHandler的'other'插件中的代码。

+0

谢谢你的回答。检查插件文件夹:它包含正确的插件的我解压缩的jar文件和类是在里面。 Application.e4xmi文件位于包含处理程序代码的插件中。 – 2012-07-20 04:11:15

+0

再次,没有解决方案,只是猜测接下来要检查什么。确实让人费解。当您使用eclipse IDE进行RCP开发时,它包含源代码。所以你可以打开'BundleLoader'类(Menu Navigate,Open Type,...),在'findClassInternal'方法中设置一个断点,或许是'name.equals(“be ..... ExitHandler” )'并试图找出它为什么失败。例如'BundleLoader.bundle'应该指向包含ExitHandler的bundle。也许在调试器中,你会得到一些暗示,为什么它找不到类:寻找错误的包? – Kay 2012-07-21 19:33:46

+0

问题的关键在于,您必须将IDE的调试器附加到导出的产品上,因为在IDE中它似乎都可以正常工作。 – Kay 2012-07-21 19:40:01

2

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

“OSGi框架和eclipse运行时使用的任何缓存数据都将被擦除干净,这将清理用于存储捆绑依赖解析和eclipse的缓存扩展注册表数据,使用这个选项将强制eclipse重新初始化这些缓存。“

更多信息here