我有一个典型的多模块 Maven 项目。
- 有一个 Jenkins 作业,它构建所有快照并将其部署到内部存储库。
- 还有另一个 Jenkins 构建,它检查代码、更新所有 pom 版本,以及构建和部署版本化的工件。
我想通过仅部署所需的工件来优化后者:即100 多个模块中的2或3个。
该构建仍应编译和测试所有模块,但仅将选定的模块工件安装/部署到内部存储库。
问题:有没有办法做到这一点?
我有一个典型的多模块 Maven 项目。
我想通过仅部署所需的工件来优化后者:即100 多个模块中的2或3个。
该构建仍应编译和测试所有模块,但仅将选定的模块工件安装/部署到内部存储库。
问题:有没有办法做到这一点?
在这种情况下,您可以在您的聚合器/父项目(主构建应该从该项目开始)中定义以通过属性跳过安装和部署执行,以便默认通过所有模块禁用它们。然后,在仍应执行此操作的少数模块中,您可以覆盖特定属性以再次启用它们。
由于整个操作针对的是 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.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>
那是。保持相同的配置文件名称也将通过相同的全局构建调用激活,但是将 key 属性设置为false
并因此再次启用安装和部署将添加此配置文件的模块。