我如何通过类路径用另一个 jar 修补一个 jar(替换类文件)

How do i patch a jar with another jar via the classpath (replacing classfiles)

我有两个jar文件,一个是我的世界服务器spigot.jar,另一个是我自己的jar(patch.jar),里面有几个小的自定义类。

patch.jar中的类需要替换spigot.jar中的类,我已经阅读了很多"tutorials"和关于这样做的问题,但是none 除了在启动脚本中使用类路径选项外,其中的 51=] 还提供了有关如何实际执行此操作的基本信息。

我试过:

我在 Patch.jar 清单中制作了 public void main()Main-Class,它 运行 main() 正确,然后没有退出加载龙头。如果我将顺序切换为先加载 spigot,它会正常加载并且不会触及我的补丁。

有谁知道如何做到这一点,或类似的东西? 我的要求是,出于法律和技术原因,不得对龙头罐进行任何修改。我已经手动替换了 spigot.jar 副本中的 类 以验证它们是否按预期工作,我的代码没有问题。

P.S。这不能成为插件的一部分,它是 mod 是有原因的,并且是支持在运行时更改数十个 NMS 类 的非常大的插件的一部分。这是为了修补一些无法在运行时通过反射 mod 化或简单地以合理的方式更改变量 类 的东西。

首先,如果您希望 Java 加载您的 classes 而不是原始文件,patch.jar 文件必须在 [=20= 之前] ] class路径中的原始jar文件。

并且您必须使用正确的命令行:

java -cp patch.jar;spigot.jar the.main.class.of.Spigot

要知道主要 class 是什么,请打开 spigot.jar,然后检查其清单文件:其中列出了主要 class。

文件也可以将其他 jar 文件列为依赖项。在这种情况下,您还必须将它们添加到 class 路径。