我正在使用Reflections来查找具有特定注释的类。 我的项目结构如下:
一个WAR包: WEB-INF/classes/...packages.../ClassAnnoted1.class
一个JAR包被WAR包包含,其中包含一个执行此代码的类:
Reflections reflections= new Reflections(ClasspathHelper.forWebInfClasses(servletContext))
Set set= reflections.getTypesAnnotatedWith(CustomAnnotation.class)
CustomAnnotation也存在于JAR包中。
集合大小是正确的(即如果我在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的war)。