没有标记或编译的Maven版本

问题描述 投票:0回答:1

我正在尝试使用maven来构建JNI项目,并且在创建GA版本时遇到了一些困难。由于本机代码的要求,该项目的本机代码至少需要在3个系统(Linux,OSX,Windows)上进行编译。我还希望GitHub Actions在GitHub上创建标签时生成发行版本。因此,我在使用Maven版本插件时遇到了许多问题。看来,maven的发布过程涉及编译和测试代码,以及在创建GA版本和发布之前搞砸了SCM。对于这个JNI项目,这根本是不可能的。我已经走过了与Ant的交叉编译器之路,出于各种原因,我真的很想摆脱它,主要是与Apple有关。我还考虑过分别释放每个JNI目标,但是我真的很想将本机代码捆绑到JAR中,当我需要在不同的构建环境中共享.m2文件夹时,事情开始变得复杂起来。是否可以在没有所有编译,测试和SCM废话的情况下发布Maven项目?也许是另一个第三方插件?我应该有更好的方法吗?作为参考,可以找到pom here

java maven java-native-interface
1个回答
0
投票

不使用发行插件,maven version plugin获得了很多成功。

maven版本插件所做的所有事情就是从快照中删除该版本,创建一个新的提交,然后将该版本升级到一个新的递增的SNAPSHOT。您可以模仿此过程,而无需使用版本就可以了解SCM。

一种方法是不SNAPSHOTS,而是使用git short哈希作为版本的一部分进行构建:

因此,在开发过程中,该版本看起来很正常

    <groupId>org.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.1.0</version>

基于标签进行“发布”构建。我的流程是

  • 提交并推送
  • 内部版本-mvn clean install,结果为my-app-1.1.0.jar
  • 部署到测试环境并运行回归测试,如果成功,我们将使用“ passed_tests”标记来标记提交
  • CI在与“ passed_tests”匹配的标签上触发-这需要与导致受测试的jar相同的提交
    • 运行mvn -f ./pom.xml versions:set -DnewVersion=${gitProps['git.build.version']}_${gitProps['git.commit.id.abbrev']}在磁盘上,我们的Maven版本现在为:
    <groupId>org.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.1.0-abcdef</version>
  • 然后运行mvn deploy。这是被部署到仓库的工件,现在我们有一个jar文件(或其他文件),其版本与git commit匹配。

您可以对所有目标体系结构使用相同的过程。

© www.soinside.com 2019 - 2024. All rights reserved.