【问题标题】:Is the tag "<optional>" valid in dependencyManagement element?标签“<optional>”在dependencyManagement 元素中是否有效?
【发布时间】:2014-06-29 22:43:23
【问题描述】:

我对 optional dependencies 的机制如何在 Maven 中工作感到有些困惑。 似乎可选依赖项仅在直接指定时才有效,而不是通过依赖项管理。


我创建了三个测试项目 p1-p3,有依赖关系:

  • p3 依赖于 p2
  • p2 依赖于 p1

如果我在 &lt;dependencies&gt; 元素中将依赖项声明为可选,则此按预期工作。 p2的POM:

<dependencies>
  <dependency>
    <groupId>testgroup</groupId>
    <artifactId>p1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <optional>true</optional>
  </dependency>
</dependencies>

结果:p3的构建拉入了p2,但没有 p1。

但是,如果我在 &lt;dependencyManagement&gt; 元素中将依赖项声明为可选,则它似乎会被忽略。 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的构建拉入p2p1。


这是预期的行为吗?我在任何地方都找不到此文档。

注意事项:

  • 使用 Maven 3.0.3 和 3.2.1 测试。
  • 为了查看 p3 的构建是否使用了 p1,我检查了mvn dependency:tree 的输出和mvn -X 列出的类路径(结果相同)。
  • 我还尝试将&lt;dependencyManagement&gt; 元素放入p1 的POM,而不是p2。结果是一样的,即&lt;optional&gt;没有效果。

【问题讨论】:

标签: java maven maven-3 dependency-management


【解决方案1】:

报告为MNG-1630。虽然关闭为“固定”,a comment suggests:

实际上,这个问题从未得到解决。在 r354544 中提交的更改是不够的,因为它们既没有更新 DefaultArtifactCollector 也没有更新 DefaultModelDefaultsInjector 来将可选标志从托管依赖项/工件传播到项目依赖项。

您现在已打开此问题 (MNG-5632) 的副本,请求更改行为或文档,这似乎是跟踪此问题的理想方式。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2020-11-13
  • 2011-04-07
  • 1970-01-01
  • 2012-04-30
相关资源
最近更新 更多