使用 org.reflections 在 JAR 文件中找不到 Java 注释

标签 java reflection annotations

我正在使用 org.reflections 库来检测我的项目中注释的一些类。当我从 eclipse 运行该项目时,会找到带注释的类。

但是,当项目打包成JAR文件并运行时,没有找到带注释的类。

这里是一些示例代码:

@TestAnnotation
public class App {
    public static void main (String[] args) { 
        Reflections reflections = new Reflections("com.package"); 
        Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(TestAnnotation.class); 

        for (Class c : annotated) { 
            System.out.println ("found annotated class " + c.getName()); 
        } 
    }
}

当我在 JAR 文件中运行此代码时,没有输出。我究竟做错了什么?

谢谢

最佳答案

注意

Reflections reflections = new Reflections("com.package");

在那里,您尝试探索位于 package 包中的带注释的类,该包嵌套在 com 包中。但package是Java关键字。所以它不能用作包名。在我将 AppTestAnnotation 移动到 com 包中后,一切正常。

但有可能你的情况真的很糟糕。可能是某个工具或某个人创建的包具有名称(例如,使用西里尔文а而不是拉丁文a,两者看起来相同在编辑器中,但它们对于 Java 来说完全不同)。当字母混合时,一切看起来都很好,但不起作用。因此,请尝试创建新的有效根包并将您的类移入其中。

关于使用 org.reflections 在 JAR 文件中找不到 Java 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257526/

相关文章:

eclipse - java.io.FileNotFoundException : null\conf\wrapper. conf(系统找不到指定的路径)

c# - 以这种方式在项目之间创建引用是一种不好的做法吗?

java - 在同一方法上使用 Jax-Rs @Get @Post

java - Spring FactoryBean 和 Autowiring 不起作用 : expected single matching bean but found 2

java - 使用 Hibernate 以 block 的形式读/写 blob 数据

Java动态返回类型?

c# - foreach (where x => x.PROPERTY),如何设置PROPERTY?

php - 带有@deprecated 注释的PHP 方法的自动弃用警告

map 的 Java 测试

java - 从实现类中获取类型参数的类