假設我有一個使用Maven 3和junit的Java項目。有src/main/java
和src/test/java
目錄分別包含主要來源和測試來源,(一切都是標準的)。Java 9 + maven + junit:測試代碼是否需要它自己的module-info.java以及它放在哪裏?
現在我想將項目遷移到Java 9. src/main/java
內容代表Java 9模塊;有com/acme/project/module-info.java
看大約是這樣的:
module com.acme.project {
require module1;
require module2;
...
}
如果測試代碼需要自己的module-info.java
?例如,添加對某些僅用於測試的模塊的依賴性,而不用於生產代碼。在這種情況下,我必須將module-info.java
設置爲src/test/java/com/acme/project/
,使模塊具有不同的名稱。這樣Maven似乎將主源和測試源視爲不同的模塊,所以我必須將包從主模塊導出到測試模塊,並且需要測試模塊中的包,如下所示:
主模塊(in src/main/java/com/acme/project
):
module prod.module {
exports com.acme.project to test.module;
}
測試模塊(在src/test/java/com/acme/project
):
module test.module {
requires junit;
requires prod.module;
}
這產生
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project test-java9-modules-junit: Compilation failure: Compilation failure:
[ERROR] /home/rpuch/git/my/test-java9-modules-junit/src/test/java/com/acme/project/GreeterTest.java:[1,1] package exists in another module: prod.module
因爲一個包被定義在兩個模塊中。所以現在我必須在主模塊和測試模塊中有不同的項目,這是不方便的。
我覺得我走錯了路,這一切都開始看起來很醜。我如何在測試代碼中擁有自己的module-info.java
,或者如何在沒有它的情況下獲得相同的效果(require
等)?
先忘記Maven 2 ...使用Maven 3 + ...測試中的'module-info'是否從我的角度來看沒有意義?背後的特殊要求/成就? – khmarbaise
這是Maven 3,當然是 –