【问题标题】:How to compile all modules but install/deploy only selected modules?如何编译所有模块但只安装/部署选定的模块?
【发布时间】:2016-08-31 13:29:57
【问题描述】:

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

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

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

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

问题:有办法吗?

【问题讨论】:

  • 感谢您编辑问题@A。迪马特奥。现在清楚多了。

标签: maven jenkins maven-3 pom.xml maven-deploy-plugin


【解决方案1】:

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

由于整个操作针对的是 CI 作业,我还建议将此行为包装在 maven profile 中,如下所示:

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

<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>

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

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

对于maven-deploy-pluginmaven.deploy.skip 属性:

将此设置为“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 并因此再次为要添加此配置文件的模块启用安装和部署。

【讨论】:

  • 好极了,你认为disable.install.deploy 可能是顶级 在这种情况下我只需要重新定义属性而不是整个配置文件。反正我自己试试,就是想问问。
  • @phani 您可以将它们定义为顶级,但这实际上取决于您是否希望将此配置保留为默认行为或仅作为 CI 行为,这就是为什么我建议包装(和隔离)个人资料中的行为。显然,如何应用到您的特定需求取决于您。希望它有所帮助
  • @phani 你最终解决了这个问题吗?您没有接受答案,也没有分享其他反馈。只是检查:)
  • 对不起,我在一定程度上测试了它,它被搁置了。将很快分享详细信息。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-03-13
  • 2017-06-07
  • 2016-12-05
  • 1970-01-01
  • 2020-12-29
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多