无法使 org.reflections.Reflections 工作,NoClassDefFoundError
Can't get org.reflections.Reflections to work, NoClassDefFoundError
我不确定自己在反射方面做错了什么。所以这是一个例子,我有一个包 testreflections.test
,里面有 classes Main
和 TestClass
。
主要class:
public class Main {
public static void main(String[] args) {
Reflections reflections = new Reflections("testreflections.test");
//Reflections reflections = new Reflections("testreflections.test.TestClass");//I also tried this
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.junit.Test.class);
System.out.println(resources.size());
for (Method set : resources) {
System.out.println(set.toString());
}
}
}
测试类:
public class TestClass {
@Test
public void testMethod() {
System.out.println("This is a test");
}
}
现在,我只是应该获取所有带有 junit Test 注释的方法(应该是 1)。这应该将一个添加到集合中,并为它打印出适当的信息。然而,eclipse 吐出这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile
at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:100)
at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:24)
at org.reflections.scanners.AbstractScanner.scan(AbstractScanner.java:30)
at org.reflections.Reflections.scan(Reflections.java:238)
at org.reflections.Reflections.scan(Reflections.java:204)
at org.reflections.Reflections.<init>(Reflections.java:129)
at org.reflections.Reflections.<init>(Reflections.java:170)
at org.reflections.Reflections.<init>(Reflections.java:143)
at testreflections.test.Main.main(Main.java:10)
Caused by: java.lang.ClassNotFoundException: javassist.bytecode.ClassFile
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 9 more
我建议你解决 org.reflections.Reflections
的依赖关系。最简单的方法是按照 here. If not, the required classpath is described here 所述使用 maven。确保下载所有必需的 jar 文件并将它们包含在 Eclipse 项目的类路径中。
在我的评论中,我错过了您只想查找注释的部分。使用标准 Java,您可以使用 java.lang.reflect.Method
的 getDeclaredAnnotations()
方法。但是想要集齐所有的方法,就没有那么简单了。
原来我只需要将 Javaassist 添加到类路径中。
请使用
--jars /hydra-analytics/gobblin-dist/lib/reflections-0.9.10.jar,/hydra-analytics/gobblin-dist/lib/guava-retrying-2.0.0.jar,/hydra-analytics/gobblin-dist/lib/javassist-3.18.2-GA.jar, ... 使用命令
我不确定自己在反射方面做错了什么。所以这是一个例子,我有一个包 testreflections.test
,里面有 classes Main
和 TestClass
。
主要class:
public class Main {
public static void main(String[] args) {
Reflections reflections = new Reflections("testreflections.test");
//Reflections reflections = new Reflections("testreflections.test.TestClass");//I also tried this
Set<Method> resources =
reflections.getMethodsAnnotatedWith(org.junit.Test.class);
System.out.println(resources.size());
for (Method set : resources) {
System.out.println(set.toString());
}
}
}
测试类:
public class TestClass {
@Test
public void testMethod() {
System.out.println("This is a test");
}
}
现在,我只是应该获取所有带有 junit Test 注释的方法(应该是 1)。这应该将一个添加到集合中,并为它打印出适当的信息。然而,eclipse 吐出这个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: javassist/bytecode/ClassFile
at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:100)
at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:24)
at org.reflections.scanners.AbstractScanner.scan(AbstractScanner.java:30)
at org.reflections.Reflections.scan(Reflections.java:238)
at org.reflections.Reflections.scan(Reflections.java:204)
at org.reflections.Reflections.<init>(Reflections.java:129)
at org.reflections.Reflections.<init>(Reflections.java:170)
at org.reflections.Reflections.<init>(Reflections.java:143)
at testreflections.test.Main.main(Main.java:10)
Caused by: java.lang.ClassNotFoundException: javassist.bytecode.ClassFile
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 9 more
我建议你解决 org.reflections.Reflections
的依赖关系。最简单的方法是按照 here. If not, the required classpath is described here 所述使用 maven。确保下载所有必需的 jar 文件并将它们包含在 Eclipse 项目的类路径中。
在我的评论中,我错过了您只想查找注释的部分。使用标准 Java,您可以使用 java.lang.reflect.Method
的 getDeclaredAnnotations()
方法。但是想要集齐所有的方法,就没有那么简单了。
原来我只需要将 Javaassist 添加到类路径中。
请使用 --jars /hydra-analytics/gobblin-dist/lib/reflections-0.9.10.jar,/hydra-analytics/gobblin-dist/lib/guava-retrying-2.0.0.jar,/hydra-analytics/gobblin-dist/lib/javassist-3.18.2-GA.jar, ... 使用命令