在Java EE应用程序

时间:2015-09-14 14:15:53

标签: java-ee reflection annotations

在我创建Java EE Web应用程序归档后,当我调用以下代码时,方法isAnnotationPresent()返回false,而它在普通Java SE中工作正常。方法应该从类中找到所有测试。以下方法位于单独的组件中。

for (Method m : clazz.getDeclaredMethods()) {
   // only method with @Test
   if (m.isAnnotationPresent(Test.class)) {

我试图用完整的类名和相同的结果来做。 当我通过Annotation遍历所有m.getAnnotations()并打印它时,Annotation就会出现。

这可能是一个Classloader问题吗?

1 个答案:

答案 0 :(得分:1)

我刚遇到同样的问题。在一个简单的.jar或.war中,一切都会正常工作,但一旦打包成.ear,它就会开始表现。正如@BalusC在他的评论中所说的,问题是注释类存在于多个地方,在我的情况下它是在.ear / lib和.ear / .war / WEB-INF / lib中,因为声明了依赖在父pom.xml中。一旦我确定.war和.jar模块中的依赖关系是<scope>provided<scope>,它就会只在.ear / lib中打包,它会再次正常工作。在我的case.ear / lib是正确的位置,因为库在.ear内的模块之间共享,但在你的情况下,其他一些地方可能是正确的,这取决于实际需要这个类的模块。在任何一种情况下,请确保类(或包含类的.jar)仅在最终工件和部署环境中出现过一次。