プロジェクト「java11-app」と共有するテスト jar アーティファクトを生成するプロジェクト「java11-core」があります。これらのプロジェクトは、コマンド ライン Maven で正常にビルドされますが、Eclipse 内では、テスト jar で共有されているクラスが見つかりません。
バージョン情報:
- Apache Maven 3.6.0 (コマンドラインおよび Eclipse)
- Java バージョン: 11.0.1、ベンダー: Oracle Corporation
- Eclipse IDE: バージョン: 2018-09 (4.9.0)
- M2E プラグイン: 1.9.1.20180912-1601
私はもともとこれらを従来の非JPMSプロジェクトとしてプロジェクトに作成しました。これらのプロジェクトは、期待どおりに正常にコンパイルおよび実行されました。module-info.java を java11-core と java11-app の両方に追加した後、Eclipse コンパイラーはコア プロジェクトの共有テスト ファイルを認識できませんでした。
これは、プロジェクト構造の概要を示すパッケージ エクスプローラーのスナップショットです。
それぞれ追加された java11-app および java11-core module-info コンテンツ:
module com.java11.app {
exports com.java11.app;
requires com.java11.core;
}
module com.java11.core {
exports com.java11.core;
}
ご覧のとおり、com.java11.core からテスト ユーティリティ パッケージをエクスポートしません。テスト パッケージをエクスポートしたくありません。エクスポートすると、テスト クラスが公開されてしまうからです。また、新しいテスト プロジェクトを導入したくもありません。実際のシナリオでは、テスト ユーティリティと、テストを支援するプロジェクトとの間に循環的な依存関係が必要になる可能性が非常に高いからです。
AppTest.java のビルド エラー。Eclipse によって報告された失敗の興味深い点は、CoreTestUtil クラスが見つからないと主張しているのではなく、次のことです。
The type com.java11.test.core.util.CoreTestUtil is not accessible AppTest.java /java11-app/src/test/java/com/java11/app line 8 Java Problem
CoreTestUtil cannot be resolved AppTest.java /java11-app/src/test/java/com/java11/app line 21 Java Problem
私の仮定は、java11-core からのこのパッケージのエクスポートの欠如、および/または java11-app でのこのパッケージの require の欠如により、クラスが別のテスト jar に存在する場合でも、Eclipse はアクセスが制限されていると信じるようになるということです。 .
java11-app のモジュール パスには、java11-core がモジュールとして含まれていることが示され、テスト コードなしがNoに設定されています。
私は新しくリリースされた機能に取り組んでいることを知っていますが、Eclipse JPMS プロジェクト全体でテスト クラスを共有することはまだサポートされていないのではないかと疑っています。しかし、サポートされている更新をどこで探すべきか (Eclipse? M2E プラグイン) がわかりません。また、ソフトウェア プロジェクトに JPMS を採用している間に生産性を高めるための回避策も知りません。
テストユーティリティをこのように共有すべきではないと信じている人のために...
この問題は、テスト ユーティリティを別のモジュールにリファクタリングすることによって解決する必要があるベスト プラクティスの問題として特徴付けられています。私はこの観点を尊重しますが、そのガイダンスに従おうとすると、DRY (Don't Repeat Yourself) やパッケージ間の循環依存関係など、他のベスト プラクティスに違反することを余儀なくされていることに気付きました。
モジュールの効果的なテストを支援し、そのモジュールに依存するモジュールの開発中に、テスト ユーティリティが出現することはよくあることです。これらのユーティリティが別のモジュールに引き出されると、これによりサイクルが作成されます。さらに、これらのユーティリティの一部は、そのモジュールに依存する他のモジュールをテストするときにも同様に役立ちます。これらのユーティリティが依存関係の新しいテスト モジュールにコピーされると、重複するコードが作成されます。この理由が、Maven の「test-jar」サポートが最初に追加された理由である可能性があります。