【问题标题】:Stop maven dependency from getting further inherited to children阻止 maven 依赖进一步继承给孩子
【发布时间】:2021-10-29 21:28:52
【问题描述】:

假设我们在 maven 中有以下依赖层次结构:

 +- projectA
 |  +- projectB
 |  |  +- projectC
 |  |  +- projectD

这里 projectB 需要来自 projectA 的某些库(比如说 libX)。 但是,层次结构中不再需要这些库(ie. C 和 D 不需要 libX)。 现在,由于 projectC 和 projectE 都从其父项目(projectA)继承了所有依赖项,因此它们可以提供这种依赖项。

Q.是否可以在projectB本身级别限制依赖继承,这样就不用到处手动排除了(即projectC、projectD等)

【问题讨论】:

  • 如果 projectA 是一个包含代码甚至依赖项的项目,那就是有问题。父级只是包装类型pom,从不包含代码。如果在那个 pom 中定义了一个完全错误的依赖项......一般规则永远不会在父项中定义依赖项......

标签: maven maven-dependency


【解决方案1】:

您可以尝试在 projectB 中使用可选依赖项,这是确切的用例:

https://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html

在你的 pom 中类似:

    <project>
      ...
      <dependencies>
        <!-- declare the dependency to be set as optional -->
        <dependency>
          <groupId>sample.ProjectA</groupId>
          <artifactId>ProjectA</artifactId>
          <version>1.0</version>
          <scope>compile</scope>
          <optional>true</optional> <!-- value will be true or false only -->
        </dependency>
      </dependencies>
    </project>

【讨论】:

    【解决方案2】:

    你可以在B中的依赖上设置&lt;optional&gt;true&lt;/optional&gt;

    请注意,如果 C 调用 B 的需要 libX 的方法,这将失败。

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 2015-06-23
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 2023-02-18
      相关资源
      最近更新 更多