0

OSGi テストに最新の Pax Exam (3.3.0) を使用しています。Pax Exam を立ち上げて実行し、バンドルを展開して開始しています。生活は良好です。

また、複数のテスト プロジェクトで再利用できるようにしたい、さまざまなファクトリやその他の便利な機能を含むユーティリティ プロジェクトもあります。Pax Exam pom.xml の依存関係として含まれている Maven プロジェクトです。

しかし、ユーティリティ jar 内に含まれるいずれかのクラスにアクセスしようとするとすぐに、ClassNotFoundException が発生します。クラスローダーをいじってみたところ、URLClassLoader を介してクラスを直接ロードできることがわかりました。それでも、ClassNotFoundException がスローされます。

ユーティリティ プロジェクトをバンドルにすることはできません。@BeforeClass アノテーション付きメソッドでユーティリティ コードを使用する必要があり、BundleContext インスタンスはまだ注入されていません。

Pax Exam 内でユーティリティ プロジェクトを取得するための最良/最も簡単な方法を誰か教えてもらえますか?

4

2 に答える 2

3

公式ドキュメントで指摘されているように@BeforeClass、少なくとも期待された方法では、Pax Exam ではサポートされていません。これは JUnit ドライバーによって実行され、テスト コンテナー内では実行されないため、バンドル コンテキストはありません。

コードをコンテナーで実行する場合は、バンドルに含める必要があります。

この質問はここで議論されています。

于 2013-09-26T20:30:09.873 に答える
2

ユーティリティ jar を取得して、ラップされたバンドルとして追加するだけです。次に、OSGI コンテナーにロードされます。必要なエクスポートされたパッケージを定義するだけです。

于 2015-09-29T09:44:34.070 に答える