Java9多模块Maven项目测试依赖项

时间:2017-11-06 21:54:17

标签: java maven java-9 maven-surefire-plugin jigsaw

我有一个包含三个模块coreutilstest-utils

的多模块maven项目

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模块化世界中使用测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项。我错过了什么吗?

1 个答案:

答案 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.

enter image description here

我还建议你看一看罗伯特的Where should I put unit tests when migrating a Java 8 project to Jigsawthis comment,确认maven的实施情况。

编辑 :创建了一个sample project,类似于主模块与core相同,依赖于guava }与您的utils相同,junit依赖项与您的testutils相同。