我有一个多模块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定义,核心的内容如下所示:
module my.project.core { requires my.project.utils; }
但是我无法弄清楚如何让核心的测试类能够在测试执行期间看到test-utils类.当maven-surefire-plugin尝试测试运行时,我找不到类.
如果我添加一个需要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是测试范围依赖项,则不需要在模块描述符中显式包含(要求)它.
通过类路径本身来处理测试依赖性.因此,您可以简单地删除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,对guava的依赖与你的utils相同,junit依赖与testutils相同.