带有Pax考试的ClassNotFoundException:org.apache.felix.dm.DependencyActivatorBase

时间:2014-06-24 10:42:15

标签: java unit-testing osgi apache-felix pax-exam

我正在使用Pax Exam(3.5.0)进行OSGi单元测试。我已经创建了一个测试,但是当我运行它时,我得到了这个堆栈跟踪:

java.lang.NoClassDefFoundError: org/apache/felix/dm/DependencyActivatorBase
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2279)
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1501)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1374)
    at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4329)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2141)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2064)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.apache.felix.dm.DependencyActivatorBase not found by com.company.wine.infrastructure [19]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1532)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1955)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 14 more

我在选项中配置了CoreOptions.mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager", "3.1.0"),我看到org.ops4j.pax.logging.pax-logging-api[org.ops4j.pax.swissbox.extender.BundleWatcher] : Scanning bundle [org.apache.felix.dependencymanager]已加载。

我仍然得到例外。任何人都知道我做错了什么?

干杯。

1 个答案:

答案 0 :(得分:0)

您必须区分Pax考试的设计方式和使用方式。 Pax Exams的主要用例是在集成测试中使用它来测试先前构建的工件。 如果您想在同一模块中进行测试,您有两种方法可以这样做 1)在maven的Integrationtest-Phase中,通过文件引用新构建的工件:依赖。
2)构建一个包含可测试类和其他工件的小包。这还需要改变测试中的Package-Imports / Exports。 可以找到执行此操作的示例here