【问题标题】:Maven3 excludes unnecessary dependencies inherited from parent pom for distribution?Maven3 排除了从父 pom 继承的不必要的依赖项进行分发?
【发布时间】:2015-06-02 01:50:21
【问题描述】:

您好,这是我想要实现的目标: 将一个更大项目的模块之一与该模块所需的所有依赖项一起分发,而不是从其父 pom 继承的所有依赖项。

为了实现这一点,我将包含在分发模块的组装插件中,它排除了所有不在包含中的东西。

请告诉我们这是惯例还是黑客行为?如果这更有意义,会接受不同的解决方案,但是会有一个父 pom 并且父 pom 将有很多与此模块无关的其他依赖项,否则告诉我们是否不应该将依赖项放在父 pom 中而是放入它们在单独的模块 poms 中

【问题讨论】:

  • 如果您不想要它的依赖关系,为什么要首先继承该父 POM?父 POM 中的依赖项应该被所有继承的项目使用。我宁愿重构父 POM。无论如何,为您提供替代方案:stackoverflow.com/a/7898553/395202

标签: java maven distribution maven-assembly-plugin


【解决方案1】:

否则告诉我们是否应该将依赖项放在父 pom 中,而是将它们放在单独的模块 pom 中

我的建议与此类似。 Parent POM 中的依赖项应该主要由继承的项目使用。你不应该盲目地将所有可能的依赖项放在你的父母身上。它正在破坏依赖管理机制。

但是,我个人通常将所有可能的依赖项作为dependencyManagement 放在父 POM 中(通常当我有一个稍微大一点的项目时,我将其设为多模块,其中一个模块是该项目的父级)。这有助于避免同一项目的各个模块定义相同依赖项的不同版本。通过这样做,每个模块(在大多数情况下)只声明它需要的依赖项的组 ID 和工件 ID。 (我希望您将每个依赖项都放在父项中的原因是相关的)

更多 information 关于管理父 POM 中的依赖项


更新: 要在评论中回答 OP 的问题:

感谢您的建议。我猜可以稍微清理一下父 POM。但是,如果不必要的依赖来自第三方库,而我们并不真正需要/想要(因为不同的版本?)只是其中的几个呢?

这是一个完全不同的故事。在某些情况下,我们希望控制如何传递查找依赖项。您想知道一些技巧:

当你声明依赖时,你可以声明excludes,这样它就排除了一些传递依赖,像这样:

<dependency>
    <groupId>foo</groupId>
    <artifactId>foo-core</artifactId>
    <version>1.0</version>
    <exclusions>
        <exclusion>
            <groupId>bar</group>
            <artifactId>bar-dep</artifactId>
        </exclusion>
    </exclusions>
</dependency>

使用dependencyManagement的一个好处是,如果你把上面的东西作为dependencyManagement放在父POM中,当几个模块需要使用foo:foo-core时,它们只需声明groupId和artifactId,不需要重复那些冗长的排除

另一种方式是,例如,在上面的例子中你仍然想要bar:bar-dep,只是你需要一个与传递查找的版本不同的版本,然后你可以简单地在你的POM中声明你想要的正确版本,并且 Maven 将使用“最近”版本,如 here 所述

还有其他依赖 empty dependency 的排除技巧,如相关评论中所述

【讨论】:

  • 感谢您的建议。我猜可以稍微清理一下父 POM。但是,如果不必要的依赖来自第三方库,而我们并不真正需要/想要(因为不同的版本?)只是其中的几个呢?
  • 如何判断排除和指定 pom 是否都已定义,然后哪个优先?在排除和存根 jar 技巧中,您将如何选择其中一个?
  • “排除”与“在 POM 中指定版本”的优先级无关。版本解析逻辑仅适用于多个版本的依赖关系,因此 Maven 需要决定使用哪个版本(他们现在使用“最近”的版本)。如果您排除,则没有相同依赖项的冲突版本。您在 POM 中的显式依赖声明只是一个新的依赖,与传递的无关(因为没有传递的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2015-02-23
  • 2013-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
  • 1970-01-01
相关资源
最近更新 更多