【发布时间】:2014-06-29 22:43:23
【问题描述】:
我对 optional dependencies 的机制如何在 Maven 中工作感到有些困惑。 似乎可选依赖项仅在直接指定时才有效,而不是通过依赖项管理。
我创建了三个测试项目 p1-p3,有依赖关系:
- p3 依赖于 p2
- p2 依赖于 p1
如果我在 <dependencies> 元素中将依赖项声明为可选,则此按预期工作。 p2的POM:
<dependencies>
<dependency>
<groupId>testgroup</groupId>
<artifactId>p1</artifactId>
<version>1.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
</dependencies>
结果:p3的构建拉入了p2,但没有 p1。
但是,如果我在 <dependencyManagement> 元素中将依赖项声明为可选,则它似乎会被忽略。 p2的POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>testgroup</groupId>
<artifactId>p1</artifactId>
<version>1.0-SNAPSHOT</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>testgroup</groupId>
<artifactId>p1</artifactId>
</dependency>
</dependencies>
结果:p3的构建拉入p2和p1。
这是预期的行为吗?我在任何地方都找不到此文档。
注意事项:
- 使用 Maven 3.0.3 和 3.2.1 测试。
- 为了查看 p3 的构建是否使用了 p1,我检查了
mvn dependency:tree的输出和mvn -X列出的类路径(结果相同)。 - 我还尝试将
<dependencyManagement>元素放入p1 的POM,而不是p2。结果是一样的,即<optional>没有效果。
【问题讨论】:
标签: java maven maven-3 dependency-management