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

标签 java classpath patch minecraft bukkit

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

patch.jar 中的类需要替换 spigot.jar 中的类,我已经阅读了大量“教程”和有关执行此操作的问题,但没有一个提供除了在启动脚本中使用类路径选项之外,甚至还有有关如何实际执行此操作的基本信息。

我已经尝试过:

  • -cp Spigot.jar Patch.jar:针对补丁抛出错误“无主 list ”,因为它没有 Main()。
  • -cp Spigot.jar; Patch.jar:输出 jvm 选项列表并关闭程序。
  • -jar Spigot.jar; Patch.jar:找不到 jar Spigot.jar;Patch.jar(我知道,这是一个远景)

我在 Patch.jar list 中创建了一个公共(public) void main()Main-Class,并且它运行了 main () 正确,然后退出而不加载插口。如果我将顺序切换为首先加载插头,它会正常加载并且永远不会触及我的补丁。

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

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

最佳答案

首先,如果您希望 Java 优先于原始类加载您的类,则 patch.jar 文件必须位于类路径中的原始 jar 文件之前。

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

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

要了解主类是什么,请打开 spigot.jar,然后检查其 list 文件:主类列在其中。

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

关于java - 如何通过类路径用另一个 jar 修补一个 jar(替换类文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33837653/

相关文章:

java - JScrollPane 中的 JTable 在不需要时强制滚动

Java URL 协议(protocol) : classpath:/?

report - NetLogo:TO-REPORT的含义是为假人解释的吗?

wix - 从单个文件位置创建 WiX 补丁

java - hibernate 映射 - 运行 hibernate 配置时出现错误

java - 用于控制和监控的简单中间件服务器

java - Spring 3.0 webapp NoClassDefFoundError - 类路径问题

mediawiki - 修补 MediaWiki,跳过次要版本?

java - Java GUI App Controller 中的ActionListener是好主意吗?

java - 如何访问多个同名资源文件?