嗨,这就是我想要实现的目标: 使用该模块所需的所有依赖项自行分发较大项目的其中一个模块,而不是从其父pom继承的所有依赖项。
为了实现这一目标,我将包含在分发模块的程序集插件中,该插件排除了包含内的所有其他内容。
如果这是练习或黑客,请告诉我们?如果更有意义,会接受一个不同的解决方案,但是会有一个父pom,而父pom会有很多与此模块无关的其他依赖项,否则告诉我们是否应该将依赖项放在父pom中而是放入他们在个别模块poms
答案 0 :(得分:1)
否则告诉我们是否不应该将依赖项放在父pom中,而是将它们放在单独的模块poms中
我的建议与此类似。父POM中的依赖关系应该主要由继承项目使用。你不应该盲目地将所有可能的依赖关系放在你的父母身上。它破坏了依赖管理机制。
但是,我个人通常会将所有可能的依赖项放在父POM中作为dependencyManagement
(通常当我有一个更大的项目时,我将其设置为多模块,其中一个模块是项目的父模块) 。这有助于避免同一项目的单个模块定义相同依赖项的不同版本。通过这样做,每个模块(在大多数情况下)仅声明它所需的依赖关系的组ID和工件ID。 (我希望你将所有依赖关系放在父母身上的原因是相关的)
关于管理父POM中的依赖关系的更多information
更新: 在评论中回答OP的问题:
感谢您的建议。我想,父POM可以清理一下。但是,如果不必要的依赖关系来自第三方库并且我们真的不需要/想要(因为版本不同?)除了少数几个之外会怎样呢?
这是一个完全不同的故事。在某些情况下,我们希望控制如何以传递方式查找依赖项。您可能想要了解一些技术:
当您声明依赖项时,您可以声明排除,因此它会排除某些传递依赖项,如下所示:
<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
的一个好处是,如果你把上面的东西放在父POM中作为dependencyManagement,当几个模块需要使用foo:foo-core
时,他们只需要声明groupId和artifactId,而不需要重复那些冗长的排除
另一种方法是,例如,在上面的示例中,您仍然需要bar:bar-dep
,只是您需要的版本与传递中的版本不同,那么您只需在您的版本中声明所需的正确版本POM和Maven将使用&#34;最近的&#34;版本,如here
还有其他依据empty dependency排除的技巧,如问题评论
中所述