未找到类def:org / glassfish / hk2 / ComponentException

时间:2015-12-01 13:20:24

标签: java maven testing jersey hk2

我需要为Jersey应用程序编写junit测试。现在我想测试依赖注入,问题是我创建了这样的类:

@RunWith(Hk2Runner.class)
public class BinderTest {
    @Inject
    private SomeClass someClass;

    @Test
    public void passingTest() {
        someClass.getSomething("asd", "asd", "asd");
        Assert.assertTrue(true);
    }
}

运行时,输出为:

java.lang.NoClassDefFoundError: org/glassfish/hk2/ComponentException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)

我正在尝试找到将该类添加到pom.xml文件但没有找到任何内容的依赖项。 你们知道哪个maven依赖包含了ComponentException类吗?

为了拥有Hk2Runner类而添加了依赖关系:

<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>auto-depends</artifactId>
    <version>2.0.5</version>
</dependency>

1 个答案:

答案 0 :(得分:2)

由于您使用旧的auto-depends依赖项,因此您还应添加hk2-deprecated依赖项:

<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2-deprecated</artifactId>
    <version>2.0.5</version>
    <scope>test</scope>
</dependency>

另一种解决方案是将auto-depends依赖项替换为新的hk2-testing,并从org.jvnet.hk2.testing.junit.HK2Runner类扩展。

<dependency>
    <groupId>org.glassfish.hk2</groupId>
    <artifactId>hk2-testing</artifactId>
    <version>2.3.0</version>
    <scope>test</scope>
</dependency>
public class BinderTest extends HK2Runner { }