如何编译所有模块但只安装/部署选定的模块?

pha*_*ani 3 pom.xml maven-3 maven maven-deploy-plugin jenkins

我有一个典型的多模块maven项目.

  • 有一个Jenkins工作,它构建并将所有快照部署到内部存储库.
  • 还有另一个Jenkins构建,它可以检查代码,更新所有pom版本,以及构建和部署版本化工件.

我想通过仅部署所需要的伪影,以优化后者:这是23100+模块.

构建仍应编译并测试所有模块,但仅将选定的模块工件安装/部署到内部存储库.

问题:有办法吗?

A_D*_*teo 5

在这种情况下,您可以在聚合器/父项目中定义(主构建应从该项目开始),以跳过安装并通过属性部署执行,以便默认情况下通过所有模块禁用它们.然后,在仍应执行此操作的少数模块中,您可以覆盖特定属性以再次启用它们.

由于整个操作都是针对CI作业,我还建议将此行为包含在maven配置文件中,如下所示:

在您的聚合器/父项目中,您可以定义:

<profiles>
    <profile>
        <id>ci-job</id>
        <properties>
            <disable.install.deploy>true</disable.install.deploy>
            <maven.install.skip>${disable.install.deploy}</maven.install.skip>
            <maven.deploy.skip>${disable.install.deploy}</maven.deploy.skip>
        </properties>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

上面的代码片段在ci-job配置文件中定义了一个新属性,默认disable.install.deploy设置为true.它的价值然后传递到以下maven.install.skip属性maven-install-plugin:

将此设置为true可绕过工件安装.将此用于不需要在本地存储库中安装的工件.

maven.deploy.skip属于maven-deploy-plugin:

将此设置为"true"以绕过工件部署

因此,运行以下内容:

mvn clean install -Pci-job

将有效地跨越构建(跨所有模块)跳过安装和部署目标执行.

然而,那是工作的一半.在您仍然需要此操作的几个模块中,您可以定义以下内容:

<profiles>
    <profile>
        <id>ci-job</id>
        <properties>
            <disable.install.deploy>false</disable.install.deploy>
        </properties>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

那是.保持相同的配置文件名称也将通过相同的全局构建调用激活,然后设置密钥属性,false并因此再次安装和部署将添加此配置文件的模块.