Reflection EclipseRCP:ClassNotFoundException或如何使其他包加载我的类

Reflection EclipseRCP:ClassNotFoundException或如何使其他包加载我的类,reflection,eclipse-plugin,eclipse-rcp,Reflection,Eclipse Plugin,Eclipse Rcp,详细信息:我正在尝试使用Jalapeno框架将我的RCP应用程序与缓存数据库连接起来。建立连接后,我正试图从表中获取所有数据,就像Jalapeno手册中的一样: if(objManager==null)返回; DBClass cortege=null; 试一试{ 迭代器术语=objManager.openByQuery(DBClass.class,null,null); System.out.println(“条款确定”); while(terms.hasNext()){ System.out.

详细信息:我正在尝试使用Jalapeno框架将我的RCP应用程序与缓存数据库连接起来。建立连接后,我正试图从表中获取所有数据,就像Jalapeno手册中的一样:

if(objManager==null)返回;
DBClass cortege=null;
试一试{
迭代器术语=objManager.openByQuery(DBClass.class,null,null);
System.out.println(“条款确定”);
while(terms.hasNext()){
System.out.println(“has next”);
cortege=(DBClass)terms.next();
}
此代码编译、运行和运行异常

java.lang.RuntimeException:myPluginId.views.DBClass
位于com.intersys.objects.POJOIterator.next(POJOIterator.java:75)
跳过
原因:java.lang.ClassNotFoundException:myPlugin.views.DBClass
位于java.net.URLClassLoader$1.run(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于sun.misc.Launcher$AppClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClass(未知源)
位于org.eclipse.core.runtime.internal.adapter.ContextFinder.loadClass(ContextFinder.java:129)
位于java.lang.ClassLoader.loadClass(未知源)
位于java.lang.ClassLoader.loadClassInternal(未知源)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(未知源)
位于com.jalapeno.runtime.ObjectCopierToPojo.detach(ObjectCopierToPojo.java:76)
位于com.jalapeno.runtime.ObjectCopierToPojo.findPojo(ObjectCopierToPojo.java:472)
位于com.intersys.classes.CacheRootObject.detach(CacheRootObject.java:255)
位于com.intersys.classes.Persistent.detach(Persistent.java:567)
位于com.intersys.objects.POJOIterator.next(POJOIterator.java:59)
at terms.next()

我根本无法得到它…类DBClass的实例刚刚创建,但无法加载该类。 然后我尝试将这段代码放在简单的java应用程序中(不是EclipseRCP),一切正常。所以我认为有些eclipse部分会阻止类加载

我还尝试在调用terms.next()之前加载类

Bundle b=Platform.getBundle(“myPluginId”);
试一试{
b、 loadClass(“DBClass”);
}catch(classnotfounde异常){
System.out.println(“无类”);
e、 printStackTrace();
}
…并出现相同错误。无法加载类。 那么,这是一个已知的问题吗?有解决方案吗

更新 经过一些研究,更新了问题:


如何让Jalapeno插件从我的插件加载类?

我不确定,但也许你必须导出类所在的包


在清单“Runtime”中选择并添加所有包,您可能希望尝试buddy classloading。有关Eclipse classloading的更多信息,Alex Blewitt已经编写了Eclipse中classloading系统的优秀概述。它已经有几年的历史了,但在大多数情况下仍然相关

buddy类加载的jist如下所示:

  • 插件声明它需要帮助加载类。它通过声明它的“好友插件”来实现这一点

  • 好友插件声明其好友策略

  • 当常规加载机制失败时,Eclipse会尝试使用您指定的buddy类加载策略

因此,在您的情况下,尝试放置:

Eclipse-BuddyPolicy: registered
在Jalapeno插件的manifest.mf文件中

并提出:

Eclipse-RegisterBuddy: id.of.jalepeno.plugin

在eclipse google group中你的插件的manifest.mf中发现,Jalapeno插件和我的类必须由同一个类加载器加载…我不知道怎么做。这是我需要的吗?如果是,如何使用它?看看我下面的答案,但是是的,我相信你需要buddy类加载。谢谢!这很有帮助!只有一件事:有办法即时通讯吗证明性能,跳过常规机制(我想它会迭代Jalapeno插件中的所有类)并首先使用好友加载(仅在预期的位置…我的意思是我知道会发生好友加载的地方)?很高兴这有帮助!但对于第二个问题,我想不出任何方法来提高性能。