【问题标题】:Should you include those dependencies in your pom that are already the dependencies of some of your dependencies?您是否应该在您的 pom 中包含那些已经是您的某些依赖项的依赖项的依赖项?
【发布时间】:2019-04-11 12:09:16
【问题描述】:

假设您需要两个依赖项:A 和 B。同时 A 已经是 B 的依赖项。那么您是否仍然希望/需要在 pom 中添加 A 和 B 作为依赖项?

我相信当 A 和 B 是外部库时,可能需要这样做,其中 A 所需的版本可能与 B 所依赖的 A 版本不同。

但是当你的模块和 A 和 B 都是同一个项目中的模块时呢?即知道他们的版本都将同步。

【问题讨论】:

    标签: maven pom.xml maven-dependency


    【解决方案1】:

    如果您的模块使用来自 B 的 API,最好将其显式添加到您的 pom 中,即使这不是绝对必要的。如果您升级 A,很可能它不再使用 B,然后您将在不更改模块代码的情况下构建失败。

    关于版本,您应该在父 pom.xml 中管理带有dependencyManagement 的版本。然后,您可以跳过子 pom 中托管依赖项的版本。 dependencyManagement 中的版本会覆盖传递依赖项中的版本,确保您在任何地方都使用相同的版本。

    如果所有模块都在同一个项目中,它们也应该共享相同的项目版本。通常,这将是快照版本,例如1-SNAPSHOT

    每个模块都会使用类似的东西:

    <project>
      <artifactId>A</artifactId>
      <version>1-SNAPSHOT</version>
    

    并在其他模块中像这样引用A和B:

    <dependency>
      <groupId>com.yourcompany</groupId>
      <artifactId>A</artifactId>
      <version>${project.version}</version>
    </dependency>
    

    要在构建版本之前设置非 SNAPSHOT 版本,例如,您可以使用 maven-dependency-plugin 的 versions:set 目标。

    【讨论】:

    • 谢谢。所以你的意思是即使在同一个项目中使用模块时,我们仍然包含所有必需的依赖项,知道一些已经包含在其他依赖项中?
    • 是的,否则构建将容易受到其他模块依赖项更改的影响。如您的示例所示,如果 A 不再需要 B,但您的模块仍然需要 A 和 B。如果有很多依赖项,并且您发现自己一遍又一遍地需要相同的集合,则可以创建一个纯 pom 模块(让我们称它为“common-deps”)来定义该集合并让您将其维护在一个地方。然后,您可以将“common-deps”作为依赖项添加到依赖 pom 而不是整个集合。这是我们项目中的一个示例模块:github.com/vespa-engine/vespa/tree/master/….
    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2018-12-18
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多