我有一个多模块 Maven 项目,包含三个模块 core
、utils
和 test-utils
核心有以下依赖定义
<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 和 java9,如果你的 my.project.testutils
是一个测试范围依赖,你不需要在模块中明确包含(requires
)它描述符。
测试依赖是通过类路径本身来处理的。所以你可以简单地删除 testutils
并且它会在执行测试时由 maven 修补。
module my.project.core {
requires my.project.utils;
}
引用slide 30 pertaining to maven-compiler-plugin.
我还建议您看一下 Where should I put unit tests when migrating a Java 8 project to Jigsaw和 this comment由 Robert 确认 maven 遵循的实现。
编辑:创建了一个 sample project打个比方,主模块和你的core
一样,对guava
的依赖和你的utils
和junit
依赖与您的 testutils
相同。
关于Java9多模块Maven项目测试依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47146491/