加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 03:02:55 所属栏目:Java 来源:网络整理
导读:我有一个多模块maven项目,包含三个模块core,utils和test-utils Core具有以下依赖项定义 dependency groupIdmy.project/groupId artifactIdutils/artifactId/dependencydependency groupIdmy.project/groupId artifactIdtest-utils/artifactId scopetest/scop
我有一个多模块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相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读