【发布时间】:2018-03-18 16:49:59
【问题描述】:
假设我有一个使用 Maven 3 和 junit 的 Java 项目。有src/main/java 和src/test/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 似乎将主源和测试源视为不同的模块,所以我必须将包从主模块导出到测试模块,并要求测试模块中的包,如下所示:
主模块(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+...a
module-info在测试中从我的角度来看没有意义吗?背后的特殊要求/成就? -
当然是 Maven 3
标签: java maven junit java-9 java-module