我有一个包含三个模块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
&#39; module-info.java
:
module my.project.core {
requires my.project.utils;
requires my.project.testutils; //test dependency
}
然后在编译时我得到一个错误,即my.project.testutils
模块无法找到(大概是因为它只是作为测试依赖项引入)。
如何在Java 9模块化世界中使用测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项。我错过了什么吗?
答案 0 :(得分:3)
使用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,确认maven的实施情况。
编辑 :创建了一个sample project,类似于主模块与core
相同,依赖于guava
}与您的utils
相同,junit
依赖项与您的testutils
相同。