Java 在RCP应用程序中使用反射实现注释扫描时出现的问题

Java 在RCP应用程序中使用反射实现注释扫描时出现的问题,java,eclipse-plugin,eclipse-rcp,reflections,Java,Eclipse Plugin,Eclipse Rcp,Reflections,我的第一次尝试是简单地将jar作为我的主应用程序的一部分。(Eclipse3.7)我知道这是不受欢迎的,但我正在编写一个独立的专业应用程序,我不太担心试图找出捆绑包 已尝试运行此操作: Reflections r = new Reflections("mypackage"); Set<Class<?>> activeActions = r .getTypesAnnotatedWith(MyAnnotation.class); Ref

我的第一次尝试是简单地将jar作为我的主应用程序的一部分。(Eclipse3.7)我知道这是不受欢迎的,但我正在编写一个独立的专业应用程序,我不太担心试图找出捆绑包

已尝试运行此操作:

 Reflections r = new Reflections("mypackage");

 Set<Class<?>> activeActions = r
                .getTypesAnnotatedWith(MyAnnotation.class);
Reflections r=新的反射(“mypackage”);

Set这看起来像是OSGI框架下的类加载问题。您必须记住,每个捆绑包/插件都维护自己的类加载器,因此我认为您使用了错误的类加载器来加载您的类,并且资源没有得到解决。首先,在OSGI中加载类,这是建议的方法:

通过使用Platform.getBundle(“com.mybundle.id”)获取包含类的Bundle/插件; 在bundle实例上有一个名为.loadClass(String类)的方法

尝试用我刚才提到的方法加载MyAnnotation.class,看看会发生什么。您引用的文章中的eclipse buddy register功能对于在OSGI下使用hibernate非常有用,在OSGI下,您映射的数据类位于捆绑包中,默认情况下hibernate使用Class.forname()加载该类,但由于该映射类不在hibernate lib捆绑包的类路径上,因此它会遇到错误。将对hibernate插件的依赖项添加到包中是没有意义的,因此在hibernate包的清单中设置eclipse buddy policy:registered(确切语法不正确)然后,在带有映射类的捆绑包中,您将hibernate注册为好友,并且在运行时,hibernate类装入器将使捆绑包中的所有类都位于其类路径上


希望这能让您了解类加载的概念,这似乎就是问题所在。尝试从bundle实例not=new()加载类

所以我终于迁移到E4了,它又停止工作了。我猜自定义url类型不适用于E4,所以我回到第1步。我不再使用E4了。上次我看到它时,它充满了未记录的类,也没有有用的教程。
org.reflections.ReflectionsException: could not create Vfs.Dir from url, 
no matching UrlType was found [bundleresource://1009.fwk651584550/]

either use fromURL(final URL url, final List<UrlType> urlTypes) 
or use the static setDefaultURLTypes(final List<UrlType> urlTypes) 
or addDefaultURLTypes(UrlType urlType) with your specialized UrlType.