我对于optional dependencies的机制在Maven中是如何工作有点困惑。 似乎可选的依赖项仅在直接指定时才起作用,而不是通过依赖项管理。
我创建了三个测试项目p1-p3,带有依赖项:
如果我在 <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。
这是预期的行为吗?我无法在任何地方找到这些文件。
注意:
mvn dependency:tree
的输出和mvn -X
列出的类路径(结果相同)。<dependencyManagement>
元素放入p1的POM中,而不是p2。结果是一样的,即<optional>
没有效果。答案 0 :(得分:5)
报告为MNG-1630。虽然已关闭为“固定&#39;”,a comment suggests:
实际上,这个问题从未修复过。在r354544中提交的更改不足,因为它们既不更新DefaultArtifactCollector也不更新DefaultModelDefaultsInjector,以将可选标志从托管依赖项/工件转换为项目依赖项。
您现在已经打开了此问题的副本(MNG-5632),要求进行行为或文档更改,这似乎是跟踪此问题的理想方式。