使用maven发布过程跨平台同步工件版本
我有一个工件,应该为几个目标平台构建:使用maven发布过程跨平台同步工件版本,maven,maven-release-plugin,multiplatform,Maven,Maven Release Plugin,Multiplatform,我有一个工件,应该为几个目标平台构建: Linux x86 Windows x86 武器11 不幸的是,由于缺少交叉编译器,不可能一次性创建工件的所有版本 换句话说,目标是在存储库中有这样的内容 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 工件-1.0.1-arm11.zip
- Linux x86
- Windows x86
- 武器11
- 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
- 工件-1.0.1-arm11.zip
- artifact-1.0.0-linux.zip
- artifact-1.0.1-windows.zip
- 工件-1.0.2-arm11.zip
- artifact-1.0.3-linux.zip
- artifact-1.0.4-windows.zip
- artifact-1.0.5-arm11.zip
注意,这不是一个关于如何组织成模块的问题。它是关于如何在多个平台上同步单个工件的发布过程。如我所见,您可以使用分类器(工件的文件名后缀),如
linux
、windows
或arm11
来区分针对特定平台的各种工件发布。因此,如果您创建由Maven管理的多模块项目,其中模块将是具有相同groupId
、相同artifactId
、相同版本
(可能从其公共父级继承)但不同分类器
的工件,您将得到您想要的东西。在这种情况下,您总是发布您的多模块POM(通常它也是其模块的公共父级),以便同时发布所有模块。假设所有模块策略的版本相同(这里似乎非常适合),您基本上可以执行:
mvn发布:准备发布:执行-DautoVersionSubmodules
就这样。您将获得发布的
artifact-1.0.0-linux.zip
,artifact-1.0.0-windows.zip
,artifact-1.0.0-arm11.zip
工件。所有模块的下一个开发版本将设置为1.0.1-SNAPSHOT
(通过从父模块继承)。您找到解决方案了吗?
很高兴知道我不是唯一一个和Maven打架的人:-)
反正
是否允许您将已发布版本部署到nexus?
我在想,你可以这样做:
1-从windows计算机执行“mvn发布:准备发布:执行”-这应该将artifact-1.0.1-windows.zip放入nexus
2-从源代码管理签出artifact-1.0.1标记
3-从linux和arm11进行“mvn部署”(不管是什么:p)-这也应该将-linux.zip和-arm11.zip引入nexus
不过,我相信,根据nexus的配置方式,它不会让您使用相同的GAV重新部署任何内容(即使分类器不同)您帮我解答了您的问题……我不知道pushChanges=false选项
使用,您可以在每个平台上设置一个作业,使用“远程触发构建(例如,从脚本)”功能执行maven系列发布。如果愿意,您可以使用参数化构建来选择要构建的版本(如果您使用该版本,那么您需要在其他平台上触发构建)。但我的观点是,当您在linux上时,您无法为windows创建二进制文件(由于某些工具链约束)。因此,在Linux上运行构建过程时,无法创建Windows二进制文件。反之亦然。因此,您无法一次性为所有平台创建所有二进制文件。--这不是关于如何组织成模块的问题。这是关于如何在多个平台上同步单个工件的发布过程。好吧,我担心Maven无法帮助您自动完成这项工作,除非您希望(并且有时间)创建自己的发布插件。正如您所提到的,您可以在不碰撞版本的情况下进行所有的重新发布,然后在最后对其进行全局bum,但这是您必须记住的。您还可以放弃通用版本控制(从父级继承),并在所有模块的POM中按字面意思键入版本。但是,这一次,您必须控制此过程,并确保所有模块都随版本一起发布,并且每个模块只发布一次。我真的看不到100%自动的方式。我只是在想,同步构建的最佳位置是工件库,但它需要允许将发布的工件标记为不完整(例如,仍在等待Windows工件)。但是,第一个发布过程(在Linux上运行的过程)需要声明预期会出现多少工件。是 啊太复杂了,你能用詹金斯吗?我不是Jenkins的专家,但快速浏览一下,我看到了一个关于分布式构建的页面。我会让你判断这对你的需求来说是不是太过分了。在我的例子中,Quickbuild不是Jenkins,而是正确的。这正是我将应用的解决方案。