1

Pax Exam を使用してテストを作成しようとしています。テスト用にロードしているバンドルの一部は、パッケージ「 org.apache.felix.ipojo 」に依存しています。

Pax Exam 構成でこのバンドルをロードする行を省略した場合、たとえば、次のようになります。

@Configuration
public Option[] config() throws MalformedURLException{
    return options(
            junitBundles(),
            BUNDLES OTHER THAN(org.apache.felix.ipojo),
            ...

次に、このパッケージに依存関係がないことを示すエラーが表示されます。

ERROR: Bundle com.N.A [35] Error starting mvn:com.N/com.N.A (org.osgi.framework.BundleException: Unresolved constraint in bundle com.N.A [35]: Unable to resolve 35.0: missing requirement [35.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.ipojo)(version>=1.8.0)))
org.osgi.framework.BundleException: Unresolved constraint in bundle com.N.A [35]: Unable to resolve 35.0: missing requirement [35.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.felix.ipojo)(version>=1.8.0))
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
        at java.lang.Thread.run(Thread.java:662)

ただし、それを含む行を追加すると:

@Configuration
public Option[] config() throws MalformedURLException{
    return options(
            junitBundles(),
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.ipojo")
            ...

ClassCastException を示すメッセージが表示されます。これは、Felix に組み込まれている ipojo バンドルが原因であると推測されます。

ERROR: Bundle org.apache.felix.ipojo [34] Error starting mvn:org.apache.felix/org.apache.felix.ipojo (org.osgi.framework.BundleException: Activator start error in bundle org.apache.felix.ipojo [34].)
java.lang.ClassCastException: org.apache.felix.ipojo.Extender cannot be cast to org.osgi.framework.BundleActivator
        at org.apache.felix.framework.Felix.createBundleActivator(Felix.java:4177)
        at org.apache.felix.framework.Felix.activateBundle(Felix.java:1972)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1895)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
        at java.lang.Thread.run(Thread.java:662)

ランナーとして Felix と JUint4TestRunner を使用しています。

競合せずにこの依存関係にアクセスするにはどうすればよいですか?

4

2 に答える 2

1

これClassCastExceptionは、クラスパスに OSGi API の別のコピーがあることを示している可能性が最も高いです。に Maven 依存関係がある場合はorg.osgi:org.osgi.core、スコープがprovidedand でないことを確認してcompileくださいtest

于 2013-02-21T18:44:42.490 に答える
0

これが私が使用するものです:

public CompositeOption ipojoBundles() {
    return new DefaultCompositeOption(
            mavenBundle("org.apache.felix", "org.apache.felix.ipojo").versionAsInProject(),
            mavenBundle("org.ow2.chameleon.testing", "osgi-helpers").versionAsInProject());
}

次のバージョン: iPOJO 1.8.6 および osgi-helpers 0.6.0

ヘルパーは、OSGi テストを作成する際の負担を軽減するメソッドです。

于 2013-02-20T11:57:52.553 に答える