如何指定整个Maven的DistributionManagement组织?

我试图弄清楚如何组织许多(大约50多个)maven2项目,以便它们可以部署到中央关系存储库中。使用mvn

deploy目标时,确实需要在distributionManagement标签中指定目标,如下所示:

<distributionManagement>

<repository>

<id>nexus-site</id>

<url>http://central_nexus/server</url>

</repository>

</distributionManagement>

现在,我不希望所有的50个以上pom.xml都包含一遍又一遍。虽然我的第一个settings.xml文件是文件,但似乎无法(通过设计)在此定义文件。因此,第一个问题是,为什么会这样呢?如果可能的话,我可以在maven2发行版的settings.xml中指定它,该发行版可以分发给所有开发人员。

我找到的唯一可能的解决方案是创建一个包含这些设置的组织范围的master-

pom项目,并通过<parent>标签使所有其他pom.xml依赖于此master-pom 。但这在多模块构建中看起来有些奇怪:

- 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

v。Aggregation的Maven网站后,写道确实是有可能的。

我发现的一个问题是Maven网站生成,该设置似乎确实存在问题(如果模块没有直接的反向引用,则无法正确链接)

那么,这是一种有效的方法吗?还有其他更明显,更简单的解决方案吗?

回答:

最好的解决方案是为组织中的所有项目创建一个简单的父pom文件项目(带有“ 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>

可以将其构建,发布并部署到您的本地关系,以便每个人都可以访问其工件。

现在,对于要使用它的所有项目,只需包括以下部分:

<parent>

<groupId>your.company</groupId>

<artifactId>company-parent</artifactId>

<version>1.0.0</version>

</parent>

该解决方案将使您可以轻松地将其他常见内容添加到公司的所有项目中。例如,如果您想将JUnit使用标准化为特定版本,那么这将是理想的选择。

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

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

- pom.xml (aggregator)

- project-parent

- project-module1

- project-module2

使用此结构所要做的就是将父模块包含在聚合器中,并使用mvn install根目录中的来构建所有内容。

我们在我的组织中使用了这种精确的解决方案,它经受了时间的考验,并为我们很好地工作。

以上是 如何指定整个Maven的DistributionManagement组织? 的全部内容, 来源链接: utcz.com/qa/435500.html

回到顶部