精简java运行环境,仅占用50MB, 适配Minecraft1.19,1.20,1.21
精简效果
精简前326MB —> 精简后50.1MB!! 完美启动Minecraft
下载地址(蓝奏云)
版本提示
- 带-jfx后缀的mcjre支持HMCL免环境启动,即包含javafx模块
- 高版本Java向下兼容低版本Minecraft
- 请注意,当使用某些与操作系统不匹配的Java版本(32或64位)、使用某些Java 7版本或安装了多个版本的Java玩Minecraft Java版时可能会引发某些用户体验问题。
- 从1.12(17w13a)开始,运行Minecraft的最低要求是Java 8。如果玩家不知道他们的电脑是否安装了Java 8,那么安装程序默认会自动安装并使用支持Minecraft运行的Java。
- 从1.17(21w19a)开始,运行Minecraft的最低要求是Java 16。
- 从1.18(1.18-pre2)开始,运行Minecraft的最低要求是Java 17。
- 从1.20.5(24w14a)开始,运行Minecraft的最低要求是Java 21,且操作系统要求为64位。
更新内容
- jre21加入javafx模块版本,以支持免环境启动HMCL(需要额外的35MB)
- jre21添加--compress=zip-9参数,占用内存更小
- 所有使用的java模块均取自Adoptium openjdk和HMCL官方使用的openjfx
使用指南
免环境启动HMCL方法
- 解压mcjre-jfx,与HMCL.exe置于同一文件夹内
- 将mcjre-jfx文件夹重命名为“jre-x64”
- 确保jre-x64为java根文件夹,例如:
- 在新设备启动HMCL(或删除C:\Users\你的用户名\AppData\Roaming\.hmcl\dependencies下的所有文件),直接进入HMCL主程序不弹出下载依赖启动框即成功
设置MC默认Java(可选)
- 打开隐藏的文件“hmcl.json”
- 找到"global"组中的以下两项:
将其替换为:"javaDir": "", "java": "Auto",
"javaDir": ".\\jre-x64\\bin\\java.exe", "java": "Custom",
- 示例:
精简过程
核心是使用jlink工具,导出需要的jmod模块
基础命令
"<jlink路径>" --module-path <其他模块路径> --compress=zip-9 --strip-debug --no-header-files --no-man-pages --strip-debug --strip-java-debug-attributes --dedup-legal-notices=error-if-not-same-content --output <输出文件夹名> --add-modules <添加的jmod模块1,添加的jmod模块2,...>
- --output:输出jre文件夹名
- --module-path:指定模块路径,多个路径用分号";"隔开(可选)
- --add-modules:指定添加的模块
- --compress:设置压缩级别,java17为0至2,java21为zip-1至zip-9(可选)
- 其他参数为剔除一些相对无用的功能和组件(可选)
精简模块
- 添加基础模块:
java.base,java.desktop,java.instrument,java.management,java.naming,java.prefs,java.rmi,java.scripting,java.sql,jdk.compiler,jdk.httpserver,jdk.unsupported,jdk.crypto.ec
- 尝试使用导出的jre启动Minecraft,得到崩溃日志:
hmcl: minecraft.log
PCL2:游戏崩溃前的输出.log - 把日志给AI分析,问出缺少的模块名加入命令,打包jre再启动,崩溃再分析,以此循环直到能正常启动MC
可用AI:chatgpt,claude,天工,文心一言等 - 最后再加上一些需要的参数即可得到打包瘦身的jre
精简版MCJRE含有的模块
游戏主程序所需模块
java.base
java.logging
java.naming
java.xml
jdk.sctp
jdk.unsupported
java.desktop
java.sql
jdk.charsets
java.net.http
jdk.xml.dom
jdk.jsobject
jdk.jfr
jdk.net
java.rmi
jdk.crypto.ec
jdk.nio.mapmode
jdk.naming.dns
jdk.zipfs
java.scripting
jdk.dynalink
java.instrument
java.compiler
java.management
jdk.management(1.20FML新增)
HMCL所需的额外模块:(版本19.0.2.1)
javafx.base
javafx.controls
javafx.graphics
javafx.media
javafx.web
完整命令(Windows)
REM #adopt 21& jfx
"<jlink路径>" --module-path <jfx模块路径> --compress=zip-9 --strip-debug --no-header-files --no-man-pages --strip-debug --strip-java-debug-attributes --dedup-legal-notices=error-if-not-same-content --output mcjre-21.0.4+7-jfx --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,jdk.net,java.rmi,jdk.crypto.ec,jdk.nio.mapmode,jdk.naming.dns,jdk.zipfs,java.scripting,jdk.dynalink,java.instrument,java.compiler,java.management,jdk.management,javafx.base,javafx.controls,javafx.graphics,javafx.media,javafx.web
REM #adopt 21
"<jlink路径>" --compress=zip-9 --strip-debug --no-header-files --no-man-pages --strip-debug --strip-java-debug-attributes --dedup-legal-notices=error-if-not-same-content --output mcjre-21.0.4+7 --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,jdk.net,java.rmi,jdk.crypto.ec,jdk.nio.mapmode,jdk.naming.dns,jdk.zipfs,java.scripting,jdk.dynalink,java.instrument,java.compiler,java.management,jdk.management
REM #adopt 17& jfx
"<jlink路径>" --module-path <jfx模块路径> --compress=2 --strip-debug --no-header-files --no-man-pages --strip-debug --strip-java-debug-attributes --dedup-legal-notices=error-if-not-same-content --output mcjre-17.0.8+7-jfx --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,jdk.net,java.rmi,jdk.crypto.ec,jdk.nio.mapmode,jdk.naming.dns,jdk.zipfs,java.scripting,jdk.dynalink,java.instrument,java.compiler,java.management,jdk.management,javafx.base,javafx.controls,javafx.graphics,javafx.media,javafx.web
REM #adopt 17
"<jlink路径>" --compress=2 --strip-debug --no-header-files --no-man-pages --strip-debug --strip-java-debug-attributes --dedup-legal-notices=error-if-not-same-content --output mcjre-17.0.8+7 --add-modules java.base,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.desktop,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,jdk.net,java.rmi,jdk.crypto.ec,jdk.nio.mapmode,jdk.naming.dns,jdk.zipfs,java.scripting,jdk.dynalink,java.instrument,java.compiler,java.management,jdk.management
配置好PATH的情况下,可以将路径改成 jlink
文件扫描结果
参考文章