【问题标题】:Maven exclusions best practicesMaven 排除最佳实践
【发布时间】:2011-08-19 23:58:44
【问题描述】:

我正在使用 Maven2。当我查看mvn dependency:tree -Dverbose 的输出时,我看到了很多:

[INFO] +- org.springframework:spring-orm:jar:3.0.5.RELEASE:compile
[INFO] |  +- (org.springframework:spring-beans:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-jdbc:jar:3.0.5.RELEASE:compile - omitted for duplicate)
[INFO] |  \- (org.springframework:spring-tx:jar:3.0.5.RELEASE:compile - omitted for duplicate)

所有这些都包含在我的 pom 中作为依赖项。我的问题是,遵循哪个策略,保留它,仅排除版本冲突,或排除每个传递依赖项。

我在手册中看不到任何与此相关的内容。

谢谢!

【问题讨论】:

  • 问题是,如果其他依赖项已经作为传递依赖项出现,为什么还要将它们添加到 POM 中?

标签: maven-2 maven maven-3 dependency-management


【解决方案1】:

依赖的重复性对 maven 来说没有问题 - 所以你可以保持原样。 (所有其他人工制品都依赖于 apache.logging - 你不必担心,maven 会照顾你)

您只需要解决版本冲突,或者您可以省略将在运行环境中提供的依赖项。

最佳做法是(如 krosenvold 所述):

包括任何包含一个 java类文件就是直接 由您的代码引用。所以任何班级 从您的来源引用 应该定义。

不要担心依赖树的重复性

【讨论】:

    【解决方案2】:

    应该(至少)包括任何包含您的代码直接引用的 java 类文件的依赖项。因此,应该定义从您的源代码引用的任何类。

    这创建了依赖定义的某种封装;您的项目负责定义自己的依赖项,并且他们再次定义他们的 依赖项。这是 mvn dependency:analyze 告诉你的东西。

    最大值的定义略差,通常由需求驱动。几个库可以依赖于第三个库的不同版本。在这种情况下,您可以抑制其中一个,或者只在您的 pom.xml 中包含正确的一个。您自己的 pom 中的版本将优先。

    有时您只需要包含一些内容即可获得适当的版本(想到数据库驱动程序)。

    但是最小依赖列表是明确定义的。

    【讨论】:

      【解决方案3】:

      如果你给了那里,你只需要给依赖,这意味着只给 org.springframework:spring-orm:jar:3.0.5.RELEASE:compile 而不是其他的依赖。这会让你的 pom 变得苗条...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-23
        • 2019-12-26
        • 2022-11-10
        • 2021-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-21
        相关资源
        最近更新 更多