告别臃肿!用jlink为你的Minecraft(1.20/1.21)定制一个50MB的专属Java运行环境

发布时间:2026/5/20 7:49:48

告别臃肿!用jlink为你的Minecraft(1.20/1.21)定制一个50MB的专属Java运行环境 告别臃肿用jlink为你的Minecraft1.20/1.21定制一个50MB的专属Java运行环境每次打开Minecraft前看着那个300多MB的标准JDK安装包是不是总觉得有些大材小用作为一个专注Java生态的技术爱好者我发现其实90%的Java模块在运行Minecraft时根本用不上。今天就让我们用JDK自带的jlink工具亲手打造一个专属于Minecraft的迷你Java运行时把那些用不到的模块统统去掉1. 准备工作理解jlink与模块化Java在动手之前我们需要搞清楚几个关键概念。Java从9版本开始引入了模块化系统JPMS这让我们能够像搭积木一样按需组合Java功能。jlink正是这个系统提供的积木组装工具——它可以根据应用程序的实际需求打包出一个只包含必要模块的定制化JRE。为什么这对Minecraft玩家特别有用标准JRE包含所有模块而Minecraft只需要其中一小部分精简后的JRE体积可以缩小80%以上加载速度更快内存占用更低特别适合需要频繁切换Java版本的多版本玩家提示本文以JDK 21为例但方法同样适用于JDK 17。确保你的系统已安装对应版本的完整JDK。2. 搭建基础环境2.1 安装必要工具首先我们需要准备以下工具Adoptium JDK 21从Adoptium官网下载并安装Minecraft客户端1.20或1.21版本文本编辑器推荐VS Code或Notepad验证JDK安装java -version # 应显示类似内容 # openjdk version 21.0.2 2024-01-16 # OpenJDK Runtime Environment Temurin-21.0.213 (build 21.0.213) # OpenJDK 64-Bit Server VM Temurin-21.0.213 (build 21.0.213, mixed mode, sharing)2.2 定位jlink工具jlink随JDK一起安装通常位于Windows:%JAVA_HOME%\bin\jlink.exemacOS/Linux:$JAVA_HOME/bin/jlink可以通过以下命令验证jlink --version3. 构建最小JRE从尝试到完美3.1 初始模块选择根据Minecraft的常见需求我们先尝试一个基础模块组合jlink --output mcjre-minimal \ --add-modules java.base,java.desktop,java.logging \ --strip-debug --no-header-files --no-man-pages \ --compresszip-9这个命令会生成一个只包含三个基础模块的JRE大小约35MB。但直接用它运行Minecraft肯定会崩溃——这正是我们想要的3.2 分析崩溃日志启动Minecraft时指定我们的迷你JRE./mcjre-minimal/bin/java -jar HMCL.jar游戏会崩溃并生成日志文件。关键是要找到类似这样的错误信息Error: Module not found: java.sql用文本编辑器打开日志文件搜索Module not found或missing module这些就是我们需要添加的模块。3.3 迭代完善模块列表根据错误提示逐步添加缺失模块。这是一个典型的迭代过程运行Minecraft → 崩溃分析日志找到缺失模块添加模块到jlink命令重复直到成功启动经过几次迭代后你的模块列表可能会包含模块类别关键模块基础必需java.base, java.loggingGUI相关java.desktop, java.awt网络相关java.net.http, jdk.net其他必需jdk.unsupported, jdk.crypto.ec3.4 完整命令示例经过多次调试后一个能运行Minecraft 1.21的完整jlink命令可能长这样jlink --output mcjre-ultimate \ --add-modules java.base,java.desktop,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported,java.sql,jdk.charsets,java.net.http,jdk.xml.dom,jdk.jsobject,jdk.jfr,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 \ --strip-debug --no-header-files --no-man-pages \ --compresszip-94. 高级优化技巧4.1 支持HMCL启动器如果你使用HMCL启动器还需要添加JavaFX模块jlink --module-path %JAVA_HOME%\jmods;path/to/javafx-jmods \ --output mcjre-with-jfx \ --add-modules java.base,java.desktop,...,javafx.base,javafx.controls,javafx.graphics \ --compresszip-94.2 压缩级别对比JDK 21提供了更高效的压缩选项压缩级别体积启动速度无压缩75MB最快zip-655MB较快zip-950MB稍慢4.3 模块依赖分析使用jdeps工具可以更科学地分析Minecraft的模块需求jdeps --list-deps minecraft.jar这会输出游戏直接依赖的模块列表作为jlink的起点。5. 实战问题排查即使按照上述步骤操作你可能还是会遇到各种问题。以下是几个常见情况及解决方案问题1游戏启动后崩溃提示缺少jdk.management解决方案添加jdk.management模块原因从Minecraft 1.20开始需要此模块问题2HMCL无法加载皮肤解决方案确保包含java.net.http和jdk.httpserver模块命令调整--add-modules ...,java.net.http,jdk.httpserver问题3Forge模组加载失败解决方案额外添加jdk.jfr和java.scripting模块特殊需求某些模组可能需要完整JDK经过几次这样的调整后你最终会得到一个既精简又功能完整的专属JRE。我的最终版本只有51.3MB而完整JRE有326MB——节省了84%的空间

相关新闻