无法让 org.reflections.Reflections 工作,NoClassDefFoundError

问题描述 投票:0回答:3

我不确定我在 Reflections 上做错了什么。这是一个例子,我有一个包

testreflections.test
,其中包含类
Main
TestClass

主要课程:

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
java annotations noclassdeffounderror
3个回答
1
投票

我建议你解决

org.reflections.Reflections
的依赖关系。最简单的方法是使用 Maven,如here所述。如果没有,所需的类路径在here中有描述。确保下载所有必需的 jar 文件并将它们包含在 Eclipse 项目的类路径中。

在我的评论中,我错过了您只想查找注释的部分。对于标准 Java,您可以使用

getDeclaredAnnotations()
java.lang.reflect.Method
方法。但想要集齐所有的手段,却并不是那么简单。


0
投票

事实证明我只需要将 Javaassist 添加到类路径中。


0
投票

请使用

 --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, ... 

通过命令

© www.soinside.com 2019 - 2024. All rights reserved.