创建Java EE web应用程序存档后,当我调用以下代码时,方法isAnnotationPresent()
返回false
,而它在普通Java SE中工作得很好。该方法应该从类中找到所有测试。下面的方法位于一个单独的组件中。
for (Method m : clazz.getDeclaredMethods()) {
// only method with @Test
if (m.isAnnotationPresent(Test.class)) {
我试过用完整的类名来做它,结果是一样的。当我通过m.getAnnotations()
遍历所有Annotation
并打印它时,那么Annotation
就存在了。
这可能是一个类加载器问题吗?
我也遇到过同样的问题。在简单的.jar或.war中,一切都可以正常工作,但是一旦打包到.ear中,它就会开始出问题。正如@BalusC在他的评论中所说,问题是注释类出现在多个地方,在我的例子中,它既在。ear/lib中,也在。ear/中。war/WEB-INF/lib,因为依赖关系是在父文件pom.xml中声明的。一旦我确定依赖项是.war和.jar模块中的<scope>provided<scope>
,它将只被打包到.ear/lib中,并且它将再次正常工作。对我来说。Ear/lib是正确的位置,因为库是在. Ear中的模块之间共享的,但在您的情况下,其他位置可能是正确的位置,这取决于哪些模块实际需要这个类。无论哪种情况,请确保类(或包含该类的.jar)在最终工件和部署环境中只出现一次。