maven - Maven导入范围不导入测试依赖项
问题描述
我想在要导入到其他 POM 的 POM 中定义大量的两者compile
和依赖项。对于依赖test
项,一切都按预期工作。compile
但是test
我的项目的 POM 中没有解决依赖关系。
她是一个极简主义的例子:
要导入的 POM:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.maven.import</groupId>
<artifactId>pom-to-be-imported</artifactId>
<packaging>pom</packaging>
<version>1</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</dependency>
</dependencies>
</project>
POM 使用导入:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.maven.import</groupId>
<artifactId>pom-using-import</artifactId>
<packaging>pom</packaging>
<version>1</version>
<dependencies>
<dependency>
<groupId>com.example.maven.import</groupId>
<artifactId>pom-to-be-imported</artifactId>
<version>1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</project>
当我运行 adependency:tree
时,它只显示 的compile
依赖项commons-lang3
,而不显示 JUnittest
依赖项:
>mvn dependency:tree
. . .
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ pom-using-import ---
[INFO] com.example.maven.import:pom-using-import:pom:1
[INFO] \- com.example.maven.import:pom-to-be-imported:pom:1:import
[INFO] \- org.apache.commons:commons-lang3:jar:3.8:runtime
[INFO] ------------------------------------------------------------------------
我怎样才能让test
依赖项也被导入?我在maven 文档中没有发现任何表明 import 仅适用于compile
依赖项。
解决方案
import
范围仅用于该部分内部dependencyManagement
。(这个概念在 maven 中也称为 BOM。)来自maven 文档:
- 进口
此范围仅在 <dependencyManagement> 部分中的 pom 类型的依赖项上受支持。
你有几个选择来实现我认为你想要的:
- 通过将
import
作用域依赖项添加到dependencyManagement
pom-using-import 中的部分来正确使用导入机制。然后,您可以删除<dependencies>
“要导入的 pom”中的部分。每个“导入 pom”都必须明确列出该部分中的所有依赖项<dependencies>
,但您不必提供版本(或范围)。
<dependencyManagement>
<dependency>
<groupId>com.example.maven.import</groupId>
<artifactId>pom-to-be-imported</artifactId>
<version>1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependencyManagement>
- 如果您所有的“导入 pom”都需要相同的依赖项,则可以通过将 'pom-to-be-imported' 声明为父级而不是使用 import 来使用继承:
<project ...>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example.maven.import</groupId>
<artifactId>pom-to-be-imported</artifactId> <!-- Rename it to e.g. 'parent' -->
<version>1</version>
<relativePath>../pom-to-be-imported/pom.xml</relativePath>
</parent>
<artifactId>pom-using-import</artifactId>
备选方案 2 可能最接近您想要的。
推荐阅读
- c# - 如何在该 C# 代码中交替更改变量?
- sql - 如何匹配列数,如果大于 2,则更新 postgresql 中的表
- c# - 如何将对象列表转换为对象列表数组,每个数组索引都有 2 个计数?
- python - 图表中线和散点的混合
- gcc - 运行 ./configure 安装 Kerberos v5 时出错
- opencv - Opencv - 如何在 GaussianBlur 之后找到每个轮廓
- angular - 带有选项卡导航调试的 NativeScript Angular 登录
- python - 库存更新自动化
- laravel - `morphTo` 方法的第一个参数的用例是什么?
- html - 如何更改 p-checkbox css 样式?