反编译JAR,修改它,重新编译?

Tes*_*dus 3 java decompiling jar recompile

我有一个较旧的 Jar 文件,必须对其进行修改才能使其正常工作。我已经用jd-gui反编译了它,并更改了需要更改的部分。我现在想知道我必须做什么才能拿回一个罐子?我想我必须添加库,但是没有额外的 lib 目录。

我如何将所有内容放在一起?

@Stephen C“因此,当您进行更改并重新编译时,生成的“.class”文件可能会出现意外的“这到底有什么相关性?我只想要 Jar 文件的功能,而不是它的 1:1 副本。

Jar 文件未签名。签署 Jar 文件的具体原因是什么?如果我从另一个程序启动它?

小智 5

如果反编译整个 jar 后缺少依赖项,则可能意味着该 jar 不包含它们。创建 jar 时,您可以选择不包含依赖项,但这假设它们在运行时在类路径上可用。运行原始jar时检查是否与类路径上的其他jar文件有任何关系。有关如何实现此目标的详细信息,请参阅此答案。一旦确定了所有依赖项,您就可以从IntelliJ / Eclipse等 IDE或命令行轻松编译 jar 。

作为旁注,如果您想对 jar 进行的更改很小或孤立,我建议编辑字节码(对于小编辑来说更容易)。我更喜欢这个字节码编辑器

如果代码的某些部分反编译失败,则重新编译时不会恢复 jar 的功能。在这种情况下,我建议您不要遍历所有可用的反编译器并希望您可以反编译该代码,而是确定您要编辑的类集,修改其余的类,以便它们编译并且不具有任何对您感兴趣的类产生副作用(不要删除这些类引用的任何内容)并编译 jar(即使这不是您想要的 jar)。然后,您可以仅从 jar 中提取要修改的类文件,并在原始 jar 中覆盖它们。仅当您的更改没有任何副作用时,这才有效。