-
Notifications
You must be signed in to change notification settings - Fork 5
Open
Labels
deps: javaenhancementNew feature or requestNew feature or requestpriority: highHighPriority StuffHighPriority Stuff
Description
前置确认
- 我理解 Issue 是用于反馈和解决问题的,而非吐槽评论区,将尽可能提供更多信息
- 我未仔细阅读这些内容,只是一键已读所有内容,并相信这不会影响问题的处理
- 我已搜索现有 Issue,确认这不是重复的功能请求
- 我已查看 README 中的 Roadmap
- 这个功能将使多个用户受益,而不仅仅是我自己
功能类型
Java 管理
问题陈述
现状分析
目前启动器的 java 检测逻辑和十分混乱且并没有覆盖常用的目录并且管理手段匮乏(除了额外安装以外几乎没有)。
建议的解决方案
目标
实现一套跨平台、高可靠性的 Java 运行环境检测机制,支持自动搜索系统已安装的 Java,并允许用户自定义 Java 目录。
检测流程
-
步骤 A:路径收集
- Windows:
- 扫描注册表
HKLM\SOFTWARE\JavaSoft及其子项。 - 扫描环境变量
PATH和JAVA_HOME。 - 扫描默认目录:
C:\Program Files\Java\。
- 扫描注册表
- macOS:
- 执行
/usr/libexec/java_home -V命令获取列表。 - 扫描
/Library/Java/JavaVirtualMachines/。
- 执行
- Linux:
- 扫描
/usr/lib/jvm/和/opt/下的常见 JDK 目录。 - 解析
which java指向的软链接。
- 扫描
- Windows:
-
步骤 B:有效性校验与信息提取
- 针对收集到的每一个
java可执行文件路径,执行一个轻量级的 Java 程序(如JavaCheck.jar)或运行java -XshowSettings:properties -version。 - 需提取的关键字段:
- Version: 识别主版本号(8, 11, 17, 21 等)以匹配 Minecraft 版本需求。
- Architecture: 区分
x86和x64,避免在 64 位系统上错误使用 32 位 Java 导致内存分配受限。 - Vendor: 识别供应商(Oracle, Temurin, Microsoft 等)方便用户排查兼容性问题。
- 针对收集到的每一个
-
步骤 C:自定义路径处理
- 提供“浏览”按钮允许用户手动选择
java或javaw。 - 对用户选择的路径强制执行 步骤 B 的校验,只有验证能成功运行且返回有效版本信息的路径才允许保存。
- 提供“浏览”按钮允许用户手动选择
数据结构建议
{
"java_installations": [
{
"path": "C:/Program Files/Java/jdk-17/bin/javaw.exe",
"version": "17.0.2",
"arch": "x64",
"vendor": "Eclipse Adoptium",
"is_recommended": true
}
],
"user_defined_path": "/home/user/my-java/bin/java"
}启动逻辑优先级
- 如果用户在实例设置中开启了“覆盖 Java 路径”,优先使用该路径。
- 否则使用启动器全局设置中选中的路径。
- 如果均未设置,则尝试从自动检测到的列表中寻找最合适的版本(如针对 MC 1.20 优先选择 Java 17+)。
- 如果均未设置且版本不匹配则在创建实例下载client时自动下载对应java并命中路径。
替代方案
No response
示例和参考
No response
优先级
高(显著改善体验)
贡献意愿
- 我愿意实现这个功能
- 我愿意帮助测试这个功能
- 我可以提供设计草图或规范
其他信息
No response
BegoniaHe
Metadata
Metadata
Assignees
Labels
deps: javaenhancementNew feature or requestNew feature or requestpriority: highHighPriority StuffHighPriority Stuff