我正在使用 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关键字。所以它不能用作包名。在我将 App
和 TestAnnotation
移动到 com 包中后,一切正常。
但有可能你的情况真的很糟糕。可能是某个工具或某个人创建的包具有包名称(例如,使用西里尔文а
而不是拉丁文a
,两者看起来相同在编辑器中,但它们对于 Java 来说完全不同)。当字母混合时,一切看起来都很好,但不起作用。因此,请尝试创建新的有效根包并将您的类移入其中。
关于使用 org.reflections 在 JAR 文件中找不到 Java 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18257526/