【问题标题】:OSGi testing with Pax-Exam Fails with no container found error使用 Pax-Exam 进行 OSGi 测试失败,没有找到容器错误
【发布时间】:2020-09-23 13:35:08
【问题描述】:

使用 Pax-Exam 进行 OSGi 测试失败并出现“未找到容器错误”。

发生这种情况是因为我从 java 7 升级到 java 8,因此我不得不将 pax-exam-2.3.0.jar(与 java 8 不兼容)更改为 pax-exam-4.4.0.jar。以及他们的其他依赖。在配置的早期,我们曾经写过 felix() 但现在已经改变了。

现在如何启动 felix 容器?

配置:

@RunWith(PaxExam.class)
@ExamReactorStrategy(PerMethod.class)
public class GibsonMiniAGLTest
{
    @Configuration
    public Option[] config() {



        return options(


                vmOption("-Dcom.sun.management.jmxremote"),
                systemPackages("sun.misc",
                        "sun.security.util",
                        "sun.security.x509",
                        "com.sun.media.imageioimpl.plugins.jpeg2000"
                        ),
                bootDelegationPackages(
                    "sun.misc.*",
                    "com.sun.*"
                ),
                bundle("abc.jar"),
                junitBundles()

            );
    }
 }

蚂蚁档​​案:

<target name="run_STOSGI">
        <property file="build/jamunTimeOut.properties"/>
        <echo message="Calculated TimeOut for Jamun_Tests in MilliSeconds = ..........." />
        <echo message="${timeout}" />
        <junit printsummary="yes" showoutput="yes" timeout="${timeout}" haltonfailure="on" maxmemory="256M" fork="on">
            <jvmarg value="-Dorg.xml.sax.driver=${saxParser}" />
            <classpath>
                <pathelement path="${jamun.path}" />
                <pathelement path="${junit.path}" />
                <pathelement path="${jar}/core.jar" />
            </classpath>
            <formatter type="xml" />
            <sysproperty key="BAT_PLUGIN" value="${BAT_PLUGIN}"/>
            <test name="com.adobe.gibsontests.SmokeTestOSGIosgi" />
        </junit>
        <move todir="${smokeTest_Location}" failonerror="false" overwrite="true" >
            <fileset dir="${smoketest_temp}"/>
        </move>
    </target>

堆栈跟踪:

  <testcase classname="com.adobe.gibsontests.SmokeTestOSGIosgi" name="initializationError" time="0.004">
    <error message="No TestContainer implementation in Classpath" type="org.ops4j.pax.exam.TestContainerException">org.ops4j.pax.exam.TestContainerException: No TestContainer implementation in Classpath
    at org.ops4j.pax.exam.spi.PaxExamRuntime.sanityCheck(PaxExamRuntime.java:266)
    at org.ops4j.pax.exam.spi.PaxExamRuntime.getTestContainerFactory(PaxExamRuntime.java:79)
    at org.ops4j.pax.exam.spi.reactors.ReactorManager.createsTestContainerFactory(ReactorManager.java:325)
    at org.ops4j.pax.exam.spi.reactors.ReactorManager.createReactor(ReactorManager.java:302)
    at org.ops4j.pax.exam.spi.reactors.ReactorManager.prepareReactor(ReactorManager.java:181)
    at org.ops4j.pax.exam.junit.impl.ProbeRunner.&lt;init&gt;(ProbeRunner.java:78)
    at org.ops4j.pax.exam.junit.PaxExam.createDelegate(PaxExam.java:82)
    at org.ops4j.pax.exam.junit.PaxExam.&lt;init&gt;(PaxExam.java:73)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

有人能指出我缺少什么吗?

我尝试在独立模式下运行 pax-exam,但它也因错误而失败: org.ops4j.pax.exam.TestContainerException: No service org.osgi.framework.launch.FrameworkFactory found in META-INF/services on classpath

【问题讨论】:

    标签: java osgi apache-felix pax-exam


    【解决方案1】:

    因为错误消息指出“Classpath 中没有 TestContainer 实现”。 您需要将容器实现放到类路径中。

    有几个选项。最基本的是:

    1.:

    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-container-native</artifactId>
      <scope>test</scope>
    </dependency>
    

    2.:

    <dependency>
      <groupId>org.ops4j.pax.exam</groupId>
      <artifactId>pax-exam-container-forked</artifactId>
      <scope>test</scope>
    </dependency>
    

    还有一些更复杂的,比如 karaf 容器等。

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 2014-03-17
      • 2012-04-29
      • 2016-03-19
      • 2012-12-24
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多