使用maven发布过程跨平台同步工件版本

时间:2012-04-05 12:12:16

标签: maven maven-release-plugin multiplatform

我有一个应该为几个目标平台构建的工件:

  • Linux x86
  • Windows x86
  • ARM11

不幸的是,由于缺少交叉编译器,因此无法一次性创建所有版本的工件。

换句话说,目标是在存储库中拥有类似这样的东西

  • artifact-1.0.0-linux.zip
  • artifact-1.0.0-windows.zip
  • artifact-1.0.0-arm11.zip
  • artifact-1.0.1-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.1-arm11.zip
  • ...

请注意,版本是同步的。如何做到这一点?

问题是发布过程会在每次构建后升级pom.xml的版本。因此,通过在各种平台上连续构建我可以实现

  • artifact-1.0.0-linux.zip
  • artifact-1.0.1-windows.zip
  • artifact-1.0.2-arm11.zip
  • artifact-1.0.3-linux.zip
  • artifact-1.0.4-windows.zip
  • artifact-1.0.5-arm11.zip
  • ...

但这不是我要找的。

我可以

  1. 在Linux上运行

    mvn release:prepare release:执行 -DpushChanges = false

    (将pushChanges设置为false发布不会增加SCM中的版本号)

  2. 然后在Windows上运行

    mvn release:prepare release:perform

    (这将增加版本号)

  3. 但是,以适当的顺序在各种平台上触发发布流程的责任在于我。 maven有没有办法帮助我?

    你有什么建议吗?

    由于


    PS。请注意,这不是关于如何组织模块的问题。它是关于如何在多个平台上同步单个工件的发布过程。

3 个答案:

答案 0 :(得分:2)

你有没有为此找到解决方案? 很高兴知道我不是唯一一个与Maven战斗的人: - )

反正

您是否可以将已发布的版本部署到nexus? 我在想,你可以这样做:

1 - 从Windows机器执行“mvn release:prepare release:perform” - 应该将artifact.1.0.1-windows.zip放入nexus。

2 - 从源代码管理

中签出artifact-1.0.1标记

3 - 从linux和arm11执行“mvn deploy”(无论是什么:P) - 这也应该将-linux.zip和-arm11.zip转换为nexus。

虽然,我相信根据nexus的配置方式,它不会让你重新部署具有相同GAV的任何东西(即使分类器不同)

答案 1 :(得分:0)

正如我所见,您使用分类器(工件的文件名后缀),如linuxwindowsarm11来区分用于特定平台的各种工件的版本。因此,如果您创建由Maven管理的多模块项目,其中模块将是具有相同groupId,相同artifactId,相同version(可能继承自其共同父项)的工件,但不同classifier,你会得到你想要的。在这种情况下,您始终释放多模块POM(通常也是其模块的通用父级),以便立即释放所有模块。假设相同版本的所有模块策略(这似乎非常适合),您基本上可以执行:

mvn release:prepare release:perform -DautoVersionSubmodules

就是这样。您将获得artifact-1.0.0-linux.zipartifact-1.0.0-windows.zipartifact-1.0.0-arm11.zip个工件。对于所有模块,下一个开发版本将设置为1.0.1-SNAPSHOT(通过从父级继承)。

答案 2 :(得分:0)

你帮我解决了你的问题......我不知道pushChanges = false选项。

使用Jenkins,您可以使用“远程触发构建(例如,从脚本)”功能在每个平台上设置作业,以执行maven一系列发布。如果需要,可以使用参数化构建来选择要构建的版本(如果使用该版本,则需要Parameterized Trigger Plugin来触发其他平台上的构建)。