如何将Java项目或Jar包打包为内置JRE的Linux可执行文件
将Java Jar包打包为内置JRE的Linux可执行文件方案
以下是3种常见且可落地的实现方式:
方案1:JDK官方jpackage工具(JDK14+ 首推)
jpackage是JDK14及以上版本内置的官方打包工具,兼容性最好,操作门槛低:
- 第一步:提前编译得到可正常运行的可执行Jar包,使用
jdeps命令扫描Jar依赖的JDK模块:jdeps --list-deps your-app.jar - 第二步:根据扫描到的模块生成精简JRE(减少最终包体积,不需要精简可跳过此步直接用完整JRE):
jlink --add-modules java.base,java.sql(替换为你扫描到的模块) --output ./minimal-jre --no-header-files --no-man-pages --strip-debug - 第三步:执行jpackage命令打包:
jpackage --type app-image --input ./jar存储目录 --main-jar your-app.jar --main-class com.xxx.你的启动类全限定名 --runtime-image ./minimal-jre(用完整JRE就替换为JRE目录路径) --name your-app --dest ./output - 最终生成的
output/your-app目录下的同名可执行文件可直接运行,整个目录拷贝到任意Linux服务器即可启动,无需额外安装JRE。
方案2:makeself打包为单文件自解压可执行程序
如果需要单个文件方便传输部署,用makeself把JRE、Jar、启动脚本打包为单个自解压文件即可:
- 第一步:准备好3类文件,统一放到
app-pkg目录下:可执行Jar包、和目标服务器架构匹配的JRE(精简/完整都可)、启动脚本start.sh - 第二步:编写启动脚本
start.sh,示例内容:
给脚本加执行权限:#!/bin/bash APP_DIR=$(dirname "$0") $APP_DIR/jre/bin/java -jar $APP_DIR/your-app.jar "$@"chmod +x start.sh - 第三步:执行makeself打包命令:
makeself --notemp ./app-pkg your-app "你的应用名称" ./start.sh - 生成的
your-app就是单个可执行文件,传到服务器执行./your-app即可自动解压内置的JRE和Jar运行。
方案3:GraalVM Native Image(原生二进制,无JRE依赖)
如果追求极小体积和极快启动速度,可以用GraalVM把Java程序直接编译为Linux原生二进制文件:
- 该方案生成的可执行文件完全不需要JRE,体积通常只有几十MB,启动速度毫秒级
- 注意限制:项目中用到的反射、动态代理、JNI等动态特性需要提前配置元数据,否则会运行报错,适合对性能要求高、代码可控的项目使用。
注意事项
- 打包用的JRE架构必须和目标服务器架构匹配,x86服务器用x86版JRE,ARM服务器用ARM版JRE
- 最终生成的可执行文件需要加执行权限才能运行:
chmod +x your-app
内容的提问来源于stack exchange,提问作者Tran
相关产品推荐
相关产品推荐

