6

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

  • Linux x86
  • 视窗 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 发布:准备发布:执行-DpushChanges=false

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

  2. 然后在 Windows 上运行

    mvn 发布:准备发布:执行

    (这会增加版本号)

但是,以正确的顺序在各种平台上触发发布过程的责任在于我。有没有办法可以帮助我解决这个问题?

你有什么建议吗?

谢谢


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

4

3 回答 3

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 (无论是什么:P)执行“mvn deploy” - 这也应该让 -linux.zip 和 -arm11.zip 进入 nexus。

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

于 2012-08-01T05:10:55.063 回答
0

如我所见,您使用分类器(工件的文件名后缀)linuxwindowsarm11区分各种工件的版本,用于特定平台。因此,如果您创建由 Maven 管理的多模块项目,其中模块将是具有相同groupId、相同artifactId、相同version(可能从它们的共同父级继承)但不同的工件classifier,您将得到您想要的。在这种情况下,你总是释放你的多模块 POM(通常它也是它的模块的公共父级)以同时释放所有模块。假设 same-version-for-all-modules-policy (这似乎很适合这里),您基本上可以执行:

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为所有模块(通过从父级继承)。

于 2012-04-05T12:45:28.483 回答
0

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

使用Jenkins,您可以使用“触发器远程构建(例如,从脚本)”功能在每个平台上设置执行 maven 版本的作业。如果您愿意,您可以使用参数化构建来选择要构建的版本(如果您使用它,那么您需要参数化触发器插件来触发其他平台上的构建)。

于 2013-04-23T22:07:10.733 回答