java - Maven3排除从父pom继承的不必要的依赖项进行分发?

标签 java maven distribution maven-assembly-plugin

嗨,这就是我想要实现的目标: 单独分发一个较大项目的模块之一,并包含该模块所需的所有依赖项,而不是从其父 pom 继承的所有依赖项。

为了实现这一目标,我将 include 放入分发模块的程序集插件中,该插件排除了 include 中未包含的所有其他内容。

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

最佳答案

otherwise tell us if we should not put dependencies in parent pom but to put them in individual module poms

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

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

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

<小时/>

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

Thanks for the suggestion. Parent POM can be cleaned up a bit I guess. But what if the unnecessary dependencies are coming from a 3rd party library and we don't really need/want (because of different versions?) all but just a few of them?

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

声明依赖项时,您可以声明排除,以便排除一些传递依赖项,如下所示:

<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 进行排除的技巧,如相关评论中所述

关于java - Maven3排除从父pom继承的不必要的依赖项进行分发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30586061/

相关文章:

java - 使用 Maven 在 SpringMVC 上出现错误 404

android - 单独分发 Java 类和 res 文件夹

python - 根据距某个点的距离从列表中随机选择一个项目?

r - 如何从 R 中的 2-D copula 中找到联合累积分布函数?

java - Java 中的 SolidWorks 亿图查看器

java - 按下空格键时打印文本

java - 添加暂停和恢复 addCircle 到 map api v2

maven - Travis CI SonarCloud错误 "Project was never analyzed. A regular analysis is required before a branch analysis"

java - tomcat-servlet-api 如何链接到 servlet-api?

java - 将 ArrayList 类中的随机字符串打印到 JLabel 文本中