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



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

  • Jenkins的一项工作是构建所有快照并将其部署到内部存储库中
  • 还有另一个Jenkins构建,它检查代码,更新所有pom版本,并构建&部署版本化的工件

我想通过只部署所需的工件来优化后者:即100+模块中的23

构建仍然应该编译和测试所有模块,但只将选定的模块工件安装/部署到内部repo。

问题:有办法吗?

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

由于整个操作针对的是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>

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

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

以及maven-deploy-plugin:的maven.deploy.skip性质

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

因此,运行以下程序:

mvn干净安装-Pci作业

将有效地跳过整个构建(跨所有模块)的安装和部署目标执行。

然而,这是工作的一半。在你仍然想要这个操作的几个模块中,你可以定义以下内容:

<profiles>
    <profile>
        <id>ci-job</id>
        <properties>
            <disable.install.deploy>false</disable.install.deploy>
        </properties>
    </profile>
</profiles>

也就是说。保持相同的配置文件名称,它也将通过相同的全局构建调用激活,但将密钥属性设置为false,因此可以为将添加此配置文件的模块再次安装和部署。

最新更新