从jar中反编译和重新编译单个文件



这个问题已经在评论的帮助下得到了解决:

有必要使用正确的目标版本重新编译java。在我的案例中,javac -source 1.3 -target 1.3而不是简单的javac起了作用。

问题描述:

我有一个编译过的.jar java程序,其中需要修改一个url字符串。使用JD,我能够对代码进行反编译并进行更改。

由于我想避免重新编译整个项目,我想我可以简单地将我修改的单个.java文件重新编译为.class,并用它替换原来的文件。

然而,在重新打包jar之后,程序确实启动了,但使用我修改的代码的功能表现不稳定。

在日志中我发现:

E EventDispatchThreadExceptionHandler:Unhandled exception occurred during event dispatching.::
java.util.MissingResourceException: Can't find bundle for base name com.myCompany.mySoftware.resources.ModuleResources, locale en_US
       at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:842)

ModuleResources.java是我修改过的文件。。。

问题分析:

  1. 重新包装没有错:如果我提取并重新包装原始罐子,一切都会正常工作
  2. 我的修改似乎也不是问题所在:当我重新编译JD反编译的java文件并使用生成的类文件进行重新打包时,我会遇到同样的失败

我对重新打包的jar文件进行了反编译,并将其与原始jar文件的反编译进行了比较:在我修改的文件中(至少)代码似乎是相同的,但JD显示了不同的行号。这能说明问题吗?

如有任何帮助,我们将不胜感激。

非常感谢!

这是一个老问题。

如今,我找到了对jar文件进行反编译和重新打包的好方法。

这是一份好文件。

https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/

我推荐文档中的第三种方法。!!!

当我重新编译JD反编译的java文件并使用生成的类文件进行重新打包时,我得到了相同的失败

这似乎把矛头指向了京东。当您重新编译JD反编译的java文件时,您能否将结果与原始.class文件进行比较(例如,通过对两者进行反汇编并比较结果)?如果他们在实质上有所不同,这将为京东有过错的理论提供证据;如果他们不这样做,那么问题就出在其他地方。

最新更新