反编译&从jar重新编译单个文件

时间:2012-03-06 12:05:03

标签: java decompiling

在评论的帮助下,此问题已得到解决:

有必要使用正确的目标版本重新编译java。在我的情况下javac -source 1.3 -target 1.3而不仅仅是javac就可以了。

问题描述:

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

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

然而,在重新打包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文件并使用生成的类文件进行重新打包时,我会遇到同样的错误。
  3. 我反编译了重新打包的jar文件,并将其与原始jar文件的反编译进行了比较:在我修改的文件中(至少)代码看起来是相同的但是JD显示了不同的行号。这可以暗示这个问题吗?

    非常感谢任何帮助。

    非常感谢!

2 个答案:

答案 0 :(得分:0)

  

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

这似乎指向JD。重新编译JD反编译的java文件时,是否可以将结果与原始.class文件进行比较(例如,通过反汇编并比较结果)?如果它们的实质不同,那将证明JD有过错的理论;如果他们不这样做,那么问题出在其他地方。

答案 1 :(得分:0)

这是个老问题。

如今,我找到了一种反编译并重新打包jar文件的好方法。

这是好文件。

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

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