Java 没有META-INF文件夹,Minecraft如何工作?

Java 没有META-INF文件夹,Minecraft如何工作?,java,minecraft,Java,Minecraft,我真的不明白这是怎么回事。我现在正试图构建一个.jar。它由两个类组成:Test.class和Sayer.class。如果我直接访问Test.class,或者正确地打包Test.jar,它就可以正常工作,但是我能让一个jar执行的唯一方法是用清单(jar-cfm-Test.jar-manifest-Test.class-Sayer.class)打包它 如果不这样做,我在尝试运行jar时会出现一个错误:错误:无效或损坏的jarfile Test.jar。如果我构建“good”jar并删除META-

我真的不明白这是怎么回事。我现在正试图构建一个
.jar
。它由两个类组成:
Test.class
Sayer.class
。如果我直接访问
Test.class
,或者正确地打包
Test.jar
,它就可以正常工作,但是我能让一个jar执行的唯一方法是用清单(
jar-cfm-Test.jar-manifest-Test.class-Sayer.class
)打包它

如果不这样做,我在尝试运行jar时会出现一个错误:
错误:无效或损坏的jarfile Test.jar
。如果我构建“good”jar并删除
META-INF/

这完全有道理。毕竟,您需要某种方法来告诉Java在哪里寻找入口点……对吗?但是,还有Minecraft的modding社区,它通常建议删除
META-INF
,以使给定的mod工作


但是,如果没有
META-INF
文件夹,Minecraft如何工作?根据我的实验,这根本不可能。这不应该破坏
minecraft.jar
就像它破坏了我的
Test.jar

因为minecraft是从启动器运行的,启动器本身可以直接将适当的启动类传递给Java,而不需要
META-INF
文件夹。

javaw-cp minecraft.jar StartupClassHere
据我所知/思考/猜测,当您通过启动器加载时,它会加载其他Java文件以加载minecraft的主jar。我的猜测是,这会加载jar,然后正如您所指出的,因此Minecraft.jar不需要metainf,forge也会这样做。但是,既然你可以不用发射器发射雷击机,也许需要做一个测试,看看这样做是否会复制他的错误来证明我的猜测。也会有一个更详细和完整的答案。哦,是的,我完全忘记了发射器。我习惯于直接在Linux上执行
minecraft.jar
,尽管我刚想到
minecraft.jar
可能是一个启动不同
minecraft.jar
的启动器,修改它会破坏游戏。@ydobonebi我在自己的.jar文件上测试了它<代码>java cf Test.jar Test.class Sayer.class&&java-cp Test.jar Test。成功了。我假设
cp
代表
类路径
@B1KMusic它确实代表类路径。它可以包含许多jar文件和目录,就像使用冒号(*nix)或分号(windows)链接系统路径一样。