在我创建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问题吗?
答案 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)仅在最终工件和部署环境中出现过一次。