【发布时间】:2018-04-19 04:18:32
【问题描述】:
我有一个多模块 maven 项目,其中包含三个模块 core、utils 和 test-utils
Core 有如下依赖定义
<dependency>
<groupId>my.project</groupId>
<artifactId>utils</artifactId>
</dependency>
<dependency>
<groupId>my.project</groupId>
<artifactId>test-utils</artifactId>
<scope>test</scope>
</dependency>
我为所有三个模块添加了 Java 9 module-info.java 定义,core 看起来像这样:
module my.project.core {
requires my.project.utils;
}
但是我不知道如何让core 的测试类能够在测试执行期间看到test-utils 类。当maven-surefire-plugin 尝试测试运行时,我得到类未找到。
如果我将requires my.project.testutils; 添加到core 的module-info.java:
module my.project.core {
requires my.project.utils;
requires my.project.testutils; //test dependency
}
然后在编译时我收到一个错误,即找不到 my.project.testutils 模块(可能是因为它只是作为测试依赖项引入的)。
在 Java 9 模块化世界中如何处理测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项。我错过了什么吗?
【问题讨论】:
-
我不是 Maven maven,也没有使用过 Surefire 插件,但是
module-info.java和两个requires绝对是错误的方向。通常,在 Java 9 中,通过“修补”模块来促进测试(Maven 和 Gradle 倾向于将其抽象掉)。另一方面,不清楚您是否看过这个 doc re: toolchains? - maven.apache.org/surefire/maven-surefire-plugin/java9.html -
这不使用 Surefire 插件,也不使用
test范围(所以我不会写它作为答案),但如果这有帮助,这里是一个使用 Maven 的小型 Java9 示例 - github.com/codetojoy/WarO_Java_9_Maven -
@MichaelEaster 修补模块上的部分在那里是正确的,但工具链部分似乎与问题无关。
标签: java maven java-9 maven-surefire-plugin java-platform-module-system