java - 运行测试时找不到 Pax Exam Option 类的类

标签 java osgi classpath pax-exam

当使用 PaxExam 运行单元测试时,我收到此 ClassNotFoundException:

java.lang.ClassNotFoundException: org.ops4j.pax.exam.Option
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2693)
at java.lang.Class.privateGetPublicMethods(Class.java:2894)
at java.lang.Class.privateGetPublicMethods(Class.java:2903)
at java.lang.Class.getMethods(Class.java:1607)
at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.findAndInvoke(JUnitProbeInvoker.java:94)
at org.ops4j.pax.exam.invoker.junit.internal.JUnitProbeInvoker.call(JUnitProbeInvoker.java:73)
at org.ops4j.pax.swissbox.framework.RemoteFrameworkImpl.invokeMethodOnService(RemoteFrameworkImpl.java:433)
at org.ops4j.pax.swissbox.framework.RemoteFrameworkImpl.invokeMethodOnService(RemoteFrameworkImpl.java:406)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:178)
at sun.rmi.transport.Transport$1.run(Transport.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:174)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:557)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:812)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:671)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

即使 PaxExam JAR(以及所有依赖项)位于 Maven 类路径上,也会发生这种情况。

我已经尝试寻找这个问题的解决方案很长一段时间了;我真的很感激任何人可以提供的任何建议。谢谢。

编辑:

该错误似乎是由于每个测试都实现从另一个提供默认 @Configuration 方法的另一个包(动态)导入的接口(interface) BundleTest 引起的。此 bundle (当前)未显式导出或导入 pax 考试类,因此这可能是问题的一部分?

一旦我测试了这个问题以找出答案,我将再次更新该问题。

最佳答案

问题确实似乎是该类通过导入另一个导入 Pax 类的类来引用。

为了说明导入:

A 级 <-- B 级 <-- 帕克斯

问题是 B 类没有导入 Bundle list 中的 Pax Exam 类。因此,当 Pax 为 A 类中的测试类创建动态导入时,B 类来自另一个包。这意味着 OSGi 没有解析 B 类中的导入。

我想,接下来的教训是检查其他依赖包的声明依赖项

希望这对将来遇到此问题的其他人有所帮助!

关于java - 运行测试时找不到 Pax Exam Option 类的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30856355/

相关文章:

osgi - Apache Karaf 如何对要安装和启动的包进行排序?

java - 如何将多个路径传递给 Java -cp 命令?

java - 如何解决由 : java. lang.ClassNotFoundException 引起的此错误

java - 获取 java.lang.ClassNotFoundException 即使我已经使用 -cp 指定了正确的 jar

java - java中的日历问题

java - "LIKE a%"。如何在应用程序引擎上写这个?

java - 当复合键与实体一起使用时,分离的实体被传递以保留

osgi - 使用 OSGi HTTP 服务启动 Wicket Web 应用程序

java - 更新 OSGi 包

java - JMSXGroupId 的 RabbitMQ 解决方法