使用Maven父级和模块

我最近发现了神奇的Maven模块和父系统。

我有几个应用程序,比方说A1,A2,A3(还有更多)。

我有几个依赖集,D1,D2,D3,D4(不是单一依赖,考虑整个框架,如Spring及其组件)

我的应用程序共享D4依赖集,因此我有一个包含它的基本pom,A1,A2,A3使用B1。

现在,棘手的部分:

A1取决于D1,D2。

A2取决于D2,D3。

A3取决于D1,D3。

如您所见,所有应用程序中都没有使用额外的依赖关系集,因此我无法在基础POM中移动它。

管理这些依赖项有什么好方法吗? 我有一个糟糕的一天,我必须更新应用程序的依赖项,我想以更简单的方式更改它。 请记住,我有更多的应用程序,因此它不能是A1,A2,A3的特定答案。

(旁注:如果您认为采用OOP风格,我的应用程序是类,依赖集是接口)

我建议你:

  • 创建父项目( pom )。

  • 使模块扩展它(通过将your-parent到扩展它的项目中)。

  • 在父级中定义部分。

  • 从扩展父项的项目中删除依赖项和插件的所有标记。

  • 您还可以为每种技术创建pom文件(在您的情况下)。 例如,您可以创建spring-dependencies-pom ,其中包含仅定义spring依赖关系的部分。 然后在需要spring的模块中,只需使用import添加spring-dependencies-pom 。 (请在此处查看有关import范围的说明)。

这将允许您在一个中心位置更改内容。

使用依赖关系管理,如下面的链接所述,版本管理被委托给父模块,子模块可以自由使用它们。

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html http://www.tutorialspoint.com/maven/maven_manage_dependencies.htm

我认为您可以创建模块D1,D2等,它们的POM中列出了它们的依赖项,但不包含Java代码或其他资源。

然后在例如模块A1中,您可以添加D1和D2作为依赖项,然后将传递所有的所有依赖项。

然后你最终处于组成D1等的依赖关系可以在一个地方管理的情况 – 也就是说,在D1的POM中。

这就是你要追求的吗?