【问题标题】:ClassNotFoundException: org.apache.felix.dm.DependencyActivatorBase with Pax ExamClassNotFoundException:org.apache.felix.dm.DependencyActivatorBase 与 Pax 考试
【发布时间】:2014-08-14 14:13:38
【问题描述】:

我正在使用 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]被加载了。

我仍然得到异常。有人知道我做错了什么吗?

干杯。

【问题讨论】:

  • 你的包中是否有它的导入?该测试是集成测试还是您将其用作单元测试?
  • 我用它作为单元测试。我的包中的导入包为单元测试做了诀窍。但是,我不明白为什么在没有此导入的情况下将其部署到 Felix 时它会起作用。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2017-08-17
    • 1970-01-01
    • 2019-05-26
    • 2012-04-29
    • 2013-06-12
    • 2013-02-04
    相关资源
    最近更新 更多