当前位置: 首页 > 知识库问答 >
问题:

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

甄正信
2023-03-14

我有两个jar文件,一个是minecraft服务器<code>插口。另一个是我自己的jar(patch.jar),其中有几个小的自定义类。

< code>patch.jar中的类需要替换< code>spigot.jar中的类,我已经阅读了许多关于这样做的“教程”和问题,但是除了使用启动脚本中的classpath选项之外,没有一个提供关于如何实际执行的基本信息。

我试过了:

  • -cpSpigot.jarPatch.jar:抛出补丁的错误"no main清单",因为它没有Main()。
  • -cpSpigot.jar;Patch.jar:输出jvm选项列表并关闭程序。
  • -jarSpigot.jar;Patch.jar:找不到jarSpigot.jar;Patch.jar(我知道,希望渺茫)

我在<code>补丁中公开了<code>void main()。jarmanifest,它正确地运行了main(),然后退出而不加载插口。如果我切换到先加载插口的顺序,它会正常加载,并且不会触及我的补丁。

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

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

共有1个答案

左丘子平
2023-03-14

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

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

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

要知道主类是什么,打开spigot.jar,并检查它的清单文件:主类在其中列出。

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

 类似资料:
  • 问题内容: 我在上,我尝试了下都无济于事。还尝试将jar移到src目录,但是java文件仍然无法编译。尝试在脚本中简单地导入httpclient。 问题答案: 安装您的JDK并将 其放置 。难道 不是 .jar文件复制到你的JDK的文件夹! 如果您还没有一个IDE,我建议您使用Eclipse或Netbeans这样的IDE。 我将建立一个新项目,创建或导入您的源,并为该项目设置一个类路径。 如果那行

  • 问题内容: 我的一个同事写了一堂课。他的班级使用我的班级。他没有告诉JVM每次编译类时我的类都在哪里,而是将这两个类打包到一个jar文件中,我可以像这样运行: 现在,我决定对班级进行更改。因此,由于我的班级已经预编译到他的jar中,所以他的班级(我仍然需要使用)使用我的旧班级。我的同事离开了,我不知道他如何将所有内容打包到一个jar文件中供我使用。 现在,当我尝试使用时,当他的班级调用我的班级时,

  • 使用Linux;应用程序目录为: java-classpath/home/momy/a1/specter src.spectermain.mainclass 我得到这个错误:错误:无法找到或加载主类src.spectersafemain.MainClass 在netbeans上,该应用程序工作得很好…。我将应用程序重新打包到。exe版本,.exe开始工作,但DB not work显示derby j

  • 我希望title本身是描述性的,但要明确的是,我试图在greeting-service.jar中包含(即,error-handling-service.jar)。在构建之后,我在新项目(即TestApplication)中包含了greeting-service.jar,但在执行我得到的TestApplication时(顺便说一句,TestApplication不是一个gradle项目) BaseE

  • 问题内容: 我如何从一个指向那个? 问题答案: 以下代码对我有用(基于[如何从jar中仅获取jarURL:URL中包含“!”和jar中的特定文件?](http://codingdict.com/questions/148394):

  • 我有一个批处理文件,它使用依赖于tools.jar(来自JDK)的maven运行java类。 例如: mvn-f.\pom.xml-e exec:java-dfile.encoding=“utf-8”-dexec.mainclass=MyClass-dexec.args=“%1%2%3%4%5%6%7%8%9”-dexec.classpathscope=runtime 我的程序使用JDK中的too