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

Luk*_*ski 5 multiplatform maven maven-release-plugin

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

  • 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:perform -DpushChanges = false

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

  2. 然后在Windows上运行

    mvn release:准备发布:执行

    (这会增加版本号)

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

你有什么建议吗?

谢谢


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

Mic*_*ski 0

linux正如我所见,您使用、windows或等分类器(工件的文件名后缀)arm11来区分针对特定平台的各种工件的版本。因此,如果您创建由 Maven 管理的多模块项目,其中模块将是具有相同groupId、相同artifactId、相同version(可能从其共同父级继承)但不同的工件classifier,您将得到您想要的。在这种情况下,您总是发布多模块 POM(通常它也是其模块的公共父级)以立即发布所有模块。假设所有模块策略的版本相同(这似乎非常适合这里),您基本上可以执行:

mvn release:prepare release:perform -DautoVersionSubmodules

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