如何在不安装Java环境的情况下运行Java文件?以及如何将Java游戏打包为独立可执行文件以满足Game Jam的限制要求?
无需预装Java运行Java程序&打包内置环境到exe方案
嘿,刚好我之前在Game Jam里也遇到过类似的需求——用Java开发但要提交不依赖系统Java的作品,还要控制体积在1GB以内,给你分享下亲测有效的方法:
一、不安装Java运行Java文件的核心思路
本质是使用自定义的轻量级JRE运行时,而不是依赖系统全局安装的Java环境。你可以自己构建只包含程序所需模块的JRE,然后用它来执行你的jar文件。
二、打包Java环境到exe的具体步骤(推荐官方工具,免费且稳定)
前提准备
确保你用的是Java 11及以上版本,因为JLink(构建自定义JRE)和JPackage(打包成exe)是从Java 9开始内置的官方工具,完全免费且适配性好。
步骤1:打包你的游戏为可执行Jar
先把你的游戏代码打包成一个可执行Jar包。如果用构建工具:
- Maven:用
maven-shade-plugin插件配置主类,执行mvn package生成带依赖的可执行Jar; - Gradle:用
shadowJar插件,执行./gradlew shadowJar生成。
如果手动打包,用命令:jar cvfe your-game.jar com.yourgame.MainClass *.class(替换主类路径和类文件)。
步骤2:用JLink构建最小化自定义JRE
JLink可以只打包你的游戏实际用到的Java模块,大幅缩小体积。
- 先分析你的Jar依赖的模块,用
jdeps命令:
输出会列出所有必须的模块(比如jdeps --list-deps your-game.jarjava.base、java.desktop等)。 - 构建自定义JRE:
jlink --add-modules 模块1,模块2,... \ --output custom-jre \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=2--compress=2是最高级别压缩,能减少30%左右的体积;--strip-debug等参数会去掉调试信息、手册等无用内容,进一步缩小体积。
这样生成的custom-jre文件夹就是你的专属轻量级JRE,体积通常只有几十MB(取决于用到的模块)。
步骤3:用JPackage打包成独立exe
JPackage可以把自定义JRE和你的Jar打包成单个exe文件(或安装包),用户双击就能运行,完全不需要装Java:
jpackage --type exe \ --input . \ --main-jar your-game.jar \ --runtime-image custom-jre \ --name YourGameName \ --icon ./game-icon.ico # 可选,给exe加图标
执行完后会生成一个YourGameName.exe,这个文件就内置了你的自定义JRE,单独运行即可。
三、体积优化技巧(确保总大小<1GB)
- 精准依赖模块:用
jdeps严格只打包需要的模块,不要盲目添加多余模块; - 压缩JRE:JLink的
--compress=2一定要开,能省很多空间; - Java版本选择:尽量用Java 17+,新版本的JLink有更多优化参数(比如
--strip-native-commands可以去掉原生命令); - 分离资源:按照活动要求,把游戏资源(图片、音频等)单独放在exe同目录下,不要打包进exe或Jar,这样exe体积只会是JRE+Jar的大小,通常远小于1GB。
备选方案:第三方工具(Launch4j)
如果你觉得官方工具步骤繁琐,可以用Launch4j:
- 先构建好自定义JRE;
- 用Launch4j把Jar打包成exe,配置exe的“JRE路径”指向同目录下的
custom-jre; - 把exe和
custom-jre文件夹一起压缩提交,用户解压后双击exe即可运行。这种方式虽然不是单个exe,但同样不需要用户装Java,也符合活动要求。
内容的提问来源于stack exchange,提问作者BlockManBlue
相关产品推荐
相关产品推荐

