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

sma*_*uel 12 maven

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

a (parent)
  -> b (submodule)
  -> c (submodule)
  -> d (submodule)
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*Ben 5

您在这里有几个选择:

  1. 没变。列出每个 pom 中的所有依赖项。但是,如果它们有共同的父级,则可以在父级 pom 中使用 dependencyManagement 来设置不同依赖项的版本。在子 poms 中,您不需要列出版本。请参阅Maven By Example 中的这一部分。这种方法的缺点是您必须一遍又一遍地重新列出相同的依赖项。
  2. 创建一个列出所有共享依赖项的父 pom。请参阅此处的示例。这里的一个缺点是,当他们出于某种原因可能需要使用另一个父项目时,您将限制所有想要利用此功能的项目使用父项目。
  3. 等待 Maven mixins,我最后听说还没有准备好
  4. 重新考虑您的设计。项目依赖这么多不同的模块和接口有意义吗?为了减少耦合,您可能希望创建一个这些新项目可以使用的界面。几个开源的多模块项目,例如 Apache Axis2,都遵循这种模式。一个模块包含您的 20 个依赖项,并公开一个新模块可以调用的接口。新模块可以只列出一个主模块作为依赖项,所有 20 个依赖项都作为传递依赖项被拉入。

我认为选择 #4 可能是正确的,但我对你的情况不够熟悉。


Rya*_*art 0

“自动”包含依赖项的唯一方法是通过传递依赖机制,并且它只能通过拉取依赖项的依赖项来工作,因此除非您有一个依赖于所有子模块的 pom,不,如果不列出,您将无法获得它们他们都出去了。需要这样做表明您的项目设计中存在缺陷。如果模块是“全部或无”,那么它们可能不是单独的模块。