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