我有一个应该为几个目标平台构建的工件:
不幸的是,由于缺少交叉编译器,因此无法一次性创建所有版本的工件。
换句话说,目标是在存储库中拥有类似这样的东西
请注意,版本是同步的。如何做到这一点?
问题是发布过程会在每次构建后升级pom.xml的版本。因此,通过在各种平台上连续构建我可以实现
但这不是我要找的。 p>
我可以
在Linux上运行
mvn release:prepare release:执行 -DpushChanges = false
(将pushChanges设置为false发布不会增加SCM中的版本号)
然后在Windows上运行
mvn release:prepare release:perform
(这将增加版本号)
但是,以适当的顺序在各种平台上触发发布流程的责任在于我。 maven有没有办法帮助我?
你有什么建议吗?
由于
PS。请注意,这不是关于如何组织模块的问题。它是关于如何在多个平台上同步单个工件的发布过程。
答案 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)
正如我所见,您使用分类器(工件的文件名后缀),如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
(通过从父级继承)。
答案 2 :(得分:0)
你帮我解决了你的问题......我不知道pushChanges = false选项。
使用Jenkins,您可以使用“远程触发构建(例如,从脚本)”功能在每个平台上设置作业,以执行maven一系列发布。如果需要,可以使用参数化构建来选择要构建的版本(如果使用该版本,则需要Parameterized Trigger Plugin来触发其他平台上的构建)。