本帖最后由 RarityEG 于 2021-7-31 00:07 编辑
问题大概是这样的:
之前我从来没有尝试过 1.17.1 Forge 的启动,结果启动时就遇到了问题:
这看上去是个启动器的问题,于是我查找了所有可能导致问题的代码,结果一无所获
然后我开始查看启动参数:(已经涂色)
我尝试过重新安装等解决方案,没有发现……
附 Java 版本:
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
重复:这看上去是个参数生成的问题,但果真如此吗?我希望得到这个问题的答案。
还有一些相关代码,不过由于我的代码风格混乱,可读性不强:
非常感谢!
问题大概是这样的:
之前我从来没有尝试过 1.17.1 Forge 的启动,结果启动时就遇到了问题:
这看上去是个启动器的问题,于是我查找了所有可能导致问题的代码,结果一无所获
然后我开始查看启动参数:(已经涂色)
我尝试过重新安装等解决方案,没有发现……
附 Java 版本:
openjdk version "16.0.1" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-16.0.1+9 (build 16.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-16.0.1+9 (build 16.0.1+9, mixed mode, sharing)
重复:这看上去是个参数生成的问题,但果真如此吗?我希望得到这个问题的答案。
还有一些相关代码,不过由于我的代码风格混乱,可读性不强:
非常感谢!
这一段
复制代码
按照对应的原版的 json 来看,应该是 jvm 的参数,也就是要放到 -cp 前面的。
- "jvm": [
- "-DignoreList=bootstraplauncher,securejarhandler,asm-commons,asm-util,asm-analysis,asm-tree,asm,client-extra,fmlcore,javafmllanguage,mclanguage,forge-,${version_name}.jar",
- "-DmergeModules=jna-5.8.0.jar,jna-platform-58.0.jar,java-objc-bridge-1.0.0.jar",
- "-DlibraryDirectory=${library_directory}",
- "-p",
- "${library_directory}/cpw/mods/bootstraplauncher/0.1.16/bootstraplauncher-0.1.16.jar${classpath_separator}${library_directory}/cpw/mods/securejarhandler/0.9.46/securejarhandler-0.9.46.jar${classpath_separator}${library_directory}/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.jar${classpath_separator}${library_directory}/org/ow2/asm/asm-util/9.1/asm-util-9.1.jar${classpath_separator}${library_directory}/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.jar${classpath_separator}${library_directory}/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.jar${classpath_separator}${library_directory}/org/ow2/asm/asm/9.1/asm-9.1.jar",
- "--add-modules",
- "ALL-MODULE-PATH",
- "--add-opens",
- "java.base/java.util.jar=cpw.mods.securejarhandler",
- "--add-exports",
- "java.base/sun.security.util=cpw.mods.securejarhandler",
- "--add-exports",
- "jdk.naming.dns/com.sun.jndi.dns=java.naming"
- ]
按照对应的原版的 json 来看,应该是 jvm 的参数,也就是要放到 -cp 前面的。
RarityEG 发表于 2021-7-30 22:32
我试过了,似乎没用,错误还是那个错误(
可这和产生的错误有什么关系呢( ...
是我把问题想简单了,我这也复现了,等下去趴下官方启动器的参数,看看有什么区别。
你似乎多了一个 “/home/rarity/Ponyville/Minecraft/versions/1.17.1/1.17.1.jar”
火车撞鸟 发表于 2021-7-30 23:48
你似乎多了一个 “/home/rarity/Ponyville/Minecraft/versions/1.17.1/1.17.1.jar”
我刚刚也发现了
(不过 JSON 中并没有要求说不能加这个啊)
本帖最后由 RarityEG 于 2021-7-30 23:59 编辑
找到解法了,-DignoreList 中的 ${version_name}.jar 要换成 1.17.1.jar,结果我换成了 1.17.1-forge-37.0.15.jar
然后搜索 modules 就出问题了
但是 37.0.10 以及之前的 Forge 没有这个参数,所以似乎在 versions 中已经有 jar 的时候不要 cp 上原来的 jar
(之前没见到过这种操作,除了 Fabric 会创建一个空的占位)
xmdhs 发表于 2021-7-30 22:45
是我把问题想简单了,我这也复现了,等下去趴下官方启动器的参数,看看有什么区别。 ...
找到解法了,-DignoreList 中的 ${version_name}.jar 要换成 1.17.1.jar,结果我换成了 1.17.1-forge-37.0.15.jar
然后搜索 modules 就出问题了
但是 37.0.10 以及之前的 Forge 没有这个参数,所以似乎在 versions 中已经有 jar 的时候不要 cp 上原来的 jar
(之前没见到过这种操作,除了 Fabric 会创建一个空的占位)
RarityEG 发表于 2021-7-30 23:57
我刚刚也发现了
(不过 JSON 中并没有要求说不能加这个啊)
毕竟启动器的 json 解析并没有一个完整清晰的官方文档, Wiki 之类的地方所讲的「规范」也只是社区人员总结的,并不是官方的意思,所以第三方启动器能做的还是逆向或者模仿官方启动器的行为。
Forge 1.17.1 这次算是用了好几个官方启动器的隐藏特性,几乎搞炸了所有第三方启动器。
RarityEG 发表于 2021-7-30 23:58
找到解法了,-DignoreList 中的 ${version_name}.jar 要换成 1.17.1.jar,结果我换成了 1.17.1-forge-37.0 ...
其实我一直挺好奇的,forge 的开发者是怎么知道这些参数,明明官方的 json 里从没有用过。。