仅用Apache Maven原生插件为命令行项目Jar注入前置桩脚本的方法
仅依赖Maven官方原生插件为CLI Java项目生成可执行Jar的最简方案
核心实现逻辑
- 不需要修改Jar内部的类结构、清单文件等核心内容,只需要把已构建完成的Jar作为普通二进制文件,和自定义桩脚本完成内容拼接即可满足需求,整个操作和Shell环境下
cat命令的文件拼接效果完全一致。 - 参考的原生命令行操作流程如下:
cat ${projectRoot}/src/main/stubs/runstub.sh target/${builtJarPath} > target/${builtJarPathWithoutExtention}-autorun.jar chmod +x target/${builtJarPathWithoutExtention}-autorun.jar
方案选型依据
选择前置注入Shell脚本的实现路径,是Linux平台上将Jar改造为无后缀可执行程序的经典思路,有大量公开技术社区的同类落地实践作为参考,实现门槛低、排查问题简单,完全适配命令行类Java项目的交付需求。
纯Maven原生插件的落地方式
全程不需要引入任何第三方Maven插件,仅使用Apache Maven官方原生维护的maven-antrun-plugin就能完整实现上述文件操作,核心配置要点:
- 将插件执行目标绑定到Maven生命周期的
package阶段末尾,确保所有操作在原始Jar正式构建完成后触发 - 通过Ant内置的文件拼接能力完成桩脚本与原始Jar的内容拼接,不需要依赖操作系统的Shell命令
- 通过Ant内置的权限设置能力,为拼接完成的产物添加可执行权限
- 整个流程没有额外的编译、打包逻辑侵入,不影响原有Jar的正常使用
内容的提问来源于stack exchange,提问作者Luciano
相关产品推荐
相关产品推荐

