gpt4 book ai didi

maven循环依赖+继承最佳实践

转载 作者:行者123 更新时间:2023-12-04 18:22:57 25 4
gpt4 key购买 nike

我有以下结构的几个项目:项目 A、B、C

它们都在 D 文件夹下的 pom.xml 中的父项目 D 下:

<module>A</module>
<module>B</module>
<module>C</module>

它们之间的依赖关系是:A<--B<--C。

A、B、C 共享许多共同的依赖关系。

1.在这种情况下组织依赖关系的最佳实践是什么,以使子 pom 非常轻,同时排除重复的依赖关系?

2.父pom的“dependencies”部分应该放什么,“dependency-management”部分应该放什么?

3.common依赖更像是:
log4j, slf4j, thrift, jetty, javax.servlet etc... 

它们中的大多数都是传递依赖项,而不是我的项目直接需要的。将它们作为依赖项放在父D的pom.xml中是否有意义,让子项目(A,B,C)从D继承它们?我注意到如果你这样做, mvn dependency:tree 会给你类似的警告。
[WARNING] Unused declared dependencies found: log4j, slf4j ....

如果这给了我警告,我认为这是 maven 不建议你做的事情?

最佳答案

  • 最重要的是:仅声明模块直接需要的依赖项。如果不了解更多有关您的模块及其依赖关系的信息,就很难提出任何具体的建议。在您的案例中,常见依赖项的示例是什么?也许重新组织你的模块有助于减少常见的依赖关系。根据您的项目,将模块 A、B 和 C 中依赖于同一 Artifact 的所有类放入新模块 E 中可能是合理的。
  • 在我看来,不应将任何内容放入父 pom 的依赖项部分(看到警告,maven 似乎感觉相同;-))。至少将多个模块中使用的所有版本的依赖项放入父级的依赖项管理部分。这有助于在整个项目中始终保持特定依赖项的相同版本。
  • 与 2. 一样,您应该只在父项的依赖项管理部分中指定这些 Artifact 的版本,并在每个需要它的模块中重复它们而不指定版本。如 1. 中所述,您应该只指定直接依赖项。例如,如果您使用 slf4j,您应该只需要在包含您的主类的模块中使用 log4j。

  • 总结一下:
  • 仅声明模块的直接依赖关系,传递依赖关系由 maven 自动处理(这是使用 maven 的主要原因之一)。
  • 仅声明所需的依赖关系:例如,在 slf4j 的情况下,您只需要一个模块,具体取决于 slf4j-log4j12 ,所有其他模块只需要依赖slf4j-api。
  • 在父 pom 中定义版本,以便所有子模块使用相同的版本。在 dependencyManagement 中执行此操作像这样的部分:
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.6.4</version>
    </dependency>
    </dependencies>
    </dependencyManagement>
  • 对于每个模块,在模块 pom 中指定所有直接依赖项,但没有像这样的版本:
    <dependencies>
    <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    </dependency>
    </dependencies>

  • 要处理许多模块共享的大量依赖项,您还可以使用以下方法:创建一个新的“依赖项集合模块”(我们称之为 X),它只依赖于每个所需的 Artifact 。现在每个模块只需要依赖 X也自动依赖于它的依赖项。我不推荐这种方法,因为(除其他原因外)现在每个模块都依赖于 X 中的依赖关系。如果从 X 中删除依赖项,您无法确定会发生什么。并且您需要查看多个 pom 才能找到模块的直接依赖关系。

    希望这个对你有帮助 :-)

    关于maven循环依赖+继承最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10284897/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com