我想在一个POM中同时定义大量compile
和test
依赖项,以将其导入到其他POM中。对于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>
当我运行dependency:tree
时,它仅显示compile
的{{1}}依赖性,而不显示JUnit commons-lang3
的依赖性:
test
如何也可以导入>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] ------------------------------------------------------------------------
依赖项? 我没有在maven documentation中找到任何内容,表明仅导入适用于test
依赖项。
答案 0 :(得分:1)
import
范围仅在dependencyManagement
部分内部使用。 (这个概念在Maven中也称为BOM。)来自maven documentation:
- 导入
仅在类型为pom的依赖项中支持此作用域
部分。
您有两种选择可以实现我认为想要的:
import
部分中添加dependencyManagement
范围内的依赖项来正确使用导入机制。然后,您可以删除“要导入的pom”中的<dependencies>
部分。每个“导入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>
<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可能最接近您想要的。