Maven项目中生成.sh可执行文件的插件推荐及install4j适用性咨询
当然有啦!我来给你梳理几个靠谱的方案,包括你提到的install4j以及其他专门的Maven插件:
一、直接用install4j生成.sh文件
你完全不用换插件——install4j本身就是跨平台的打包工具,它不仅能生成Windows的.exe,也支持生成Linux/Unix平台的.sh可执行脚本(甚至还能生成macOS的.app)。
在Maven中配置install4j插件时,只需要在插件参数里指定目标平台为Linux/Unix,或者在install4j的可视化配置界面中选择对应的输出类型(比如带启动脚本的tar.gz包),流程和生成.exe基本一致,非常省心。
二、轻量级Maven插件方案
如果不想依赖install4j这类重型工具,下面这几个Maven插件可以直接帮你生成.sh启动脚本:
1. appassembler-maven-plugin(最推荐)
这个插件专门为Java应用生成跨平台启动脚本,对Linux/Unix的.sh支持非常友好。它会自动帮你处理classpath、JVM参数配置,不需要手动写脚本模板,生成的脚本可以直接执行。
举个简单的配置示例:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>2.1.0</version> <configuration> <programs> <program> <mainClass>com.yourcompany.YourMainClass</mainClass> <name>your-app</name> <!-- 生成的.sh脚本名称 --> </program> </programs> <platforms> <platform>unix</platform> <!-- 指定只生成Unix平台脚本 --> </platforms> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>assemble</goal> </goals> </execution> </executions> </plugin>
执行mvn package后,脚本会生成在target/appassembler/bin/目录下,直接赋予可执行权限就能用。
2. maven-assembly-plugin
这个插件可以自定义组装你的应用包,包括把jar和手动编写的.sh脚本打包到一起,还能自动设置脚本的可执行权限。你需要先写一个shell脚本模板(比如包含java -jar your-app.jar的逻辑),然后在assembly的descriptor配置文件中指定包含这个脚本,并设置权限为0755。
3. maven-shade-plugin(配合脚本使用)
它主要用来打fat jar(把所有依赖打包到一个jar里),本身不直接生成.sh,但你可以先打好fat jar,再用assembly插件或者手动添加启动脚本,也能实现一键启动的效果。
总结
- 如果已经在使用install4j,直接用它生成.sh就好,跨平台支持完善;
- 想要轻量级方案,appassembler-maven-plugin是最省心的选择,配置简单且自动化程度高;
- 如果你需要高度自定义脚本逻辑,maven-assembly-plugin会更灵活。
内容的提问来源于stack exchange,提问作者Ajit A Ankalle

