【发布时间】:2013-04-05 19:30:23
【问题描述】:
我使用Reflections 来查找具有特定注释的类。我的项目结构如下
一个 WAR 包: WEB-INF/classes/...packages.../ClassAnnoted1.class
war 包含的一个 JAR 包,它有一个执行此代码的类:
Reflections reflections= new Reflections(ClasspathHelper.forWebInfClasses(servletContext))
Set set= reflections.getTypesAnnotatedWith(CustomAnnotation.class)
JAR 包中也存在 CustomAnnotation。
设置大小是正确的(即,如果我的 WAR jar 中有 3 个带有注释的类,则设置大小返回为 3),但其中的所有元素都是 null 而不是 Class。我需要获取类并检查JAR类中的注释参数。
有人知道为什么会这样吗?
编辑:
Reflections reflections= new Reflections("com.my.customAnnotededClasses"); //package that my annoted class is in
Set set= reflections.getTypesAnnotatedWith(CustomAnnotation.class);
也不起作用,在这种情况下,设置长度为零,而不是带有注释的类数。
编辑 2: 好的,真正的问题是我将整个应用程序打包为 EAR,所以我有以下内容:
EAR
----> WAR
----> JAR
jar 包含在 EAR lib 文件夹中,而不是 WAR lib 文件夹中。所以jar类看不到war类,一旦我让WAR直接依赖于JAR,就像这样:
EAR
----> WAR
---------> JAR
它开始工作了。但最初的问题仍然存在,可能存在我希望将 Jar 类包含在 EAR 而不是 WAR 中的情况(例如,如果我有多个战争需要使用我的 jar)。
【问题讨论】:
-
您的注释类是否用@Retention(RetentionPolicy.RUNTIME) 标记?
-
@better_use_mkstemp 是的
-
multimap 'reflections.getStore().get(TypeAnnotationsScanner.class)' 是否包含您想要的内容?你在使用 osgi 容器吗?
标签: java reflection reflections