当前位置: 首页 > 知识库问答 >
问题:

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

陶瀚玥
2023-03-14

我有一个多模块maven项目,包含三个模块coreutilstest-utils

Core具有以下依赖项定义

<dependency>
   <groupId>my.project</groupId>
   <artifactId>utils</artifactId>
</dependency>
<dependency>
   <groupId>my.project</groupId>
   <artifactId>test-utils</artifactId>
   <scope>test</scope>
</dependency>

我已经为所有三个模块添加了Java9module-info.Java定义,core的如下所示:

module my.project.core {
   requires my.project.utils;
}

但是,我不知道如何让core测试类能够在测试执行期间看到test-utils类。当maven-surefire-plugin尝试测试运行时,找不到类。

如果向核心模块-info.java添加需要My.Project.TestUtils;的模块-info.java:

module my.project.core {
   requires my.project.utils;
   requires my.project.testutils; //test dependency
}

然后在编译时,我得到一个错误,即找不到my.project.testUtils模块(大概是因为它只是作为测试依赖项引入的)。

在Java9模块化的世界中,如何处理测试依赖关系?原因很明显,我不希望我的主代码引入测试依赖项。我是不是漏掉了什么?

共有1个答案

南宫凯康
2023-03-14

使用maven和java9,如果您的my.project.testUtils是一个测试范围依赖项,则不需要在模块描述符中显式包含(requires)它。

测试依赖关系是通过类路径本身来处理的。因此您只需删除testutils,它就会在执行测试时由maven修补。

module my.project.core {
   requires my.project.utils;
}

请参阅有关maven-compiler-plugin的幻灯片30。

编辑:创建了一个示例项目,该项目绘制了一个类比,即主模块与您的core相同,对guava的依赖项与您的utils相同,而junit依赖项与您的testutils相同。

 类似资料:
  • 我正在使用STS 2.9.1(构建在Eclipse 3.7.2上)和与STS(V1.0.200.20111228-1245)绑定的m2e插件。 我有一个问题是包含多个模块的Eclipse项目中缺少依赖项,或者我不完全理解它应该如何工作。 这是一个maven项目。 在我的项目>Properties>Java Build Path>Libraries中,我有“maven dependencies”库,

  • 我有一个关于Maven依赖解析机制如何在多模块项目中工作的问题。 通常,我只在构建多模块项目时使用“mvn clean install”,我的假设是,如果项目中的任何模块需要以前的模块,依赖关系将通过访问本地存储库并加载相应的“jar”来解决。 由于项目内部原因,我必须使用“mvn清洁编译”,这个命令自然不会创建任何“jar”,而“install”不存在。所以在这里我开始想知道,多模块项目的依赖项

  • 问题:Maven在我的测试中找不到一些依赖项 在我的pom中是这样导入的。xml: 我已经试过了: mvn测试编译 使Intellij缓存无效 重启Intellij 清除. m2并重建项目

  • 请找到下面所有的3个POM。

  • 我有一个多模块Maven项目,有模块“app”和“域”。应用依赖于域。域模块有公共和私有代码。公共代码在包中。 在Domain模块的pom中,我添加了maven jar插件的执行,该插件使用分类器“api”(仅包含公共类)生成一个额外的项目工件。 在应用程序模块中,我在域模块上添加了一个“运行时”范围的依赖项(因此所有类都存在于运行时),并在分类的“API”上添加了编译时范围的依赖。这是为了确保应

  • 我有一个多模块maven项目。请在父POM下方找到。 儿童POM如下所示。 我已经在parent中声明了从slf4j进行日志记录,但在eclipse中没有生成相同的maven依赖项,因此我无法在代码中使用日志记录。谁能告诉我这里出了什么问题吗。