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

前端之家收集整理的这篇文章主要介绍了Java9多模块Maven项目测试依赖项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个多模块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 Jigsawthis comment,Robert确认maven的实现如下.

编辑:创建了一个类似于主模块与核心相同的sample project,对guava的依赖与你的utils相同,junit依赖与testutils相同.

原文链接:https://www.f2er.com/java/128621.html

猜你在找的Java相关文章