6

通常のマニフェスト管理の依存関係と Maven Tycho を使用した外部ビルドを使用して Eclipse でビルドされた OSGi バンドルがいくつかあります。

Equinox の Eclipse 内でバンドルを実行すると、正常に動作します。Tychoでそれらを構築するとうまくいきます。

ここで、Tycho Surefire を使用して統合テストを実行したいと考えています。そのために、いくつかの基本的なテストを含む単純なテスト バンドルを作成しました。テスト中のバンドルは、正しく実行するために、OSGi コンテナーに存在する他のバンドルといくつかのマイナーな開始レベルの調整に依存しています。前述のように、Equinox で通常どおり実行すると、バンドル自体は完全に正常に起動します。

そのため、Tycho Surefire でこれを模倣するために、テスト バンドルの pom.xml で次のように指定しました。

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>tycho-surefire-plugin</artifactId>
            <version>0.21.0</version>
            <configuration>
                <bundleStartLevel>
                    <bundle>
                        <id>org.hibernate.osgi</id>
                        <level>6</level>
                        <autoStart>true</autoStart>
                    </bundle>
                    <!-- plus a few more bundles in the real pom.xml -->
                </bundleStartLevel>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.eclipse.tycho</groupId>
            <artifactId>target-platform-configuration</artifactId>
            <configuration>
                <dependency-resolution>
                    <extraRequirements>
                        <requirement>
                            <type>eclipse-plugin</type>
                            <id>org.hibernate.entitymanager</id>
                            <versionRange>4.2.12.Final</versionRange>
                        </requirement>
                        <requirement>
                            <type>eclipse-plugin</type>
                            <id>org.hibernate.osgi</id>
                            <versionRange>4.2.12.Final</versionRange>
                        </requirement>
                        <!-- plus a few more bundles in the real pom.xml -->
                    </extraRequirements>
                </dependency-resolution>
            </configuration>
        </plugin>
    </plugins>
</build>

興味深いことに、テストは失敗しました。いくつかの調査の後、失敗したテストの実行中/実行後に OSGi コンソールにアクセスして問題をさらに調査する方法を見つけました ( tycho テストの実行後の OSGi コンソール)。

私の発見は、すべての必要なバンドル (すべての推移的に派生したバンドルとすべての手動で指定されたバンドル) が OSGi コンテナーに存在するにもかかわらず、特徴的なバンドルのみ<bundleStartLevel>が開始されているということです (もちろん、OSGi コアバンドルも)。

したがって、上記の例を考えると、私の調査結果は、 と の両方が解決されている間org.hibernate.osgiorg.hibernate.entitymanager最初のものだけが「ACTIVE」状態にあるということです。これは明らかに起動全体を台無しにしており、バンドルが期待どおりに起動する場合、テストは正常に実行されると思います。

「通常の」Eclipse-OSGi-Launch 構成を見ると、デフォルトで true に設定されている「Default Auto-Start」パラメーターがあります。Tycho Surefire のドキュメントにはそのようなものは見つかりませんでしたが、一部のバンドルに特定の開始レベルを設定すると、他のバンドルの自動開始が上書きされる可能性はありますか? 少なくとも、Tycho がデフォルトでバンドルを自動起動していないとは思いません...

その問題をさらに調査する方法についてのヒントや、それぞれに個別の開始レベルを指定することなく Tycho にバンドルを開始させる方法の手がかりをいただければ幸いです。

4

1 に答える 1

4

誰かがまだこれに出くわしている場合:

Tycho 0.23 以降、バンドルの自動開始は設定可能です。

<configuration>
  <defaultStartLevel>
    <level>7</level>
    <autoStart>true</autoStart>
  </defaultStartLevel>
</configuration>
于 2016-01-08T11:31:40.640 に答える