Java 9 + maven + junit:测试代码是否需要模块信息.java以及将其放在哪里?
假设我有一个使用Maven 3和junit的Java项目。有 和 目录分别包含主要来源和测试来源(一切都是标准的)。src/main/java
src/test/java
现在我想将项目迁移到 Java 9。 内容表示 Java 9 模块;看起来大致是这样的:src/main/java
com/acme/project/module-info.java
module com.acme.project {
require module1;
require module2;
...
}
如果测试代码需要自己的需求呢?例如,添加对某些模块的依赖性,该模块仅用于测试,而不需要用于生产代码。在这种情况下,我必须给模块一个不同的名称。这样,Maven 似乎将主源代码和测试源视为不同的模块,因此我必须将包从主模块导出到测试模块,并且需要在测试模块中包含包,如下所示:module-info.java
module-info.java
src/test/java/com/acme/project/
主模块 (在 ):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