如何指定maven的分发pipe理组织范围?

我想弄清楚如何组织许多(大约50多个)maven2项目,以便他们可以部署到一个中央连接库。 当使用mvn deploy目标时,需要像这样在distributionManagement标签中指定目标:

 <distributionManagement> <repository> <id>nexus-site</id> <url>http://central_nexus/server</url> </repository> </distributionManagement> 

现在,我不希望每一个pom.xml(50+)都包含这个块。 我的第一虽然将是settings.xml文件,但似乎不可能(在devise上)在那里定义它。 所以,第一个问题是,为什么是这样呢? 如果可能的话,我可以在maven2发行版中的settings.xml中指定它,它可以分发给所有的开发者。

我find的唯一可能的解决scheme是创build一个组织范围的master-pom项目,它包含这些设置,并通过<parent>标签使所有其他的pom.xml依赖于这个master-pom。 但是这在多模块构build中看起来有些奇怪:

 - master configuration POM (pm) - Project 1 parent pom (p1 with module 1 and module 2 as modules) - Project 1 module pom (with pm as parent) - Project 2 module pom (with pm as parent) 

通常我读的所有文档中,模块poms应该使用父pom,而不是一些不同的。 但是在阅读了关于inheritance与聚合的maven网站之后,写道这确实是可能的。

我发现的一个问题是在maven网站的一代,这似乎有这个设置的问题(模块没有得到正确的链接,如果他们没有直接的回参考)

那么,这是一个有效的方法吗? 任何其他更明显,更简单的解决scheme?

最好的解决scheme是创build一个简单的父项目文件项目(包装“POM”)一般来自你的组织的所有项目。

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>your.company</groupId> <artifactId>company-parent</artifactId> <version>1.0.0-SNAPSHOT</version> <packaging>pom</packaging> <distributionManagement> <repository> <id>nexus-site</id> <url>http://central_nexus/server</url> </repository> </distributionManagement> </project> 

这可以build立,发布和部署到您的本地连接,所以每个人都可以访问它的神器。

现在对于你想使用它的所有项目,只需要包括这个部分:

 <parent> <groupId>your.company</groupId> <artifactId>company-parent</artifactId> <version>1.0.0</version> </parent> 

该解决scheme将允许您轻松地将其他常见的东西添加到您公司的所有项目中。 例如,如果您想将您的JUnit用法标准化为特定版本,那么这将是完美的地方。

如果您有使用具有自己父级的多模块结构的项目,Maven还支持链式inheritance,因此,将项目的父级文件引用到公司的父级pom并让项目的子模块甚至不知道您的项目是完全可以接受的公司的父母。

我从您的示例项目结构中看到,您正试图将您的父项目放在与您的聚合器pom相同的级别。 如果您的项目需要自己的父项,我发现的最好的方法是将父项包含在与其他模块相同的级别中,并将您的aggregator pom.xml文件放在所有模块目录所在的根目录下。

 - pom.xml (aggregator) - project-parent - project-module1 - project-module2 

你对这个结构所做的事情就是把你的父模块包含在聚合器中,并用根目录下的“mvn install”来构build所有的东西。

我们在我的组织中使用了这个确切的解决scheme,经受了时间的考验,为我们工作得非常好。