Maven - 将pom的所有子模块包含在另一个模块中作为依赖项

时间:2011-10-21 11:49:52

标签: maven

我们有一个maven模块,设置如下:

a (parent)
  -> b (submodule)
  -> c (submodule)
  -> d (submodule)

此子模块列表设置为随着时间的推移而增长(到20左右的列表)。我们有另一个模块,它将包含a的所有子模块作为依赖项。有没有一种巧妙的方法,而不是必须手动保持子模块列表与依赖项列表同步。即有没有办法将a和所有子模块包含为依赖?

3 个答案:

答案 0 :(得分:4)

你有几个选择:

  1. 没有变化。列出每个pom中的所有依赖项。但是,如果它们具有公共父级,则可以在父pom中使用dependencyManagement来设置不同依赖项的版本。在子poms中,您不需要列出版本。见this section from Maven By Example。这种方法的缺点是你必须反复重新列出相同的依赖项。
  2. 创建一个列出所有共享依赖项的父pom。查看示例here。这里的缺点是,当您出于某种原因需要使用其他父项目时,您正在限制所有希望利用此项目的项目来使用父项目。
  3. 等待Maven mixins,我听到的最后一次是still not ready
  4. 重新考虑你的设计。项目依赖于这么多不同的模块和接口是否有意义?要减少coupling,您可能需要创建一个这些新项目可以使用的接口。一些开源的多模块项目,如Apache Axis2,遵循这种模式。一个模块包含20个依赖项,并公开新模块可以调用的接口。新模块可以将一个主模块列为依赖项,并将所有20个依赖项作为传递依赖项引入。
  5. 我认为选择#4可能是对的,但我对你的情况并不熟悉。

答案 1 :(得分:1)

除了设计注意事项之外,这很容易完成 - 只需在指向父pom的依赖项中包含 <type>pom</type> 。 E.g:

<dependency>
    <groupId>my.group.id</groupId>
    <artifactId>a</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>pom</type>
</dependency>

答案 2 :(得分:0)

依赖项“自动”包含的唯一方法是通过传递依赖机制,它只能通过引入依赖项的依赖关系来工作,所以除非你有一个依赖于所有子模块的pom,否则你不会得到他们没有全部列出来。这样做的需要指出了项目设计中的缺陷。如果模块是“全部或全部”,那么它们可能不是单独的模块。