0

我有一个充满错误的 Java 类,甚至无法在我的计算机上编译(我不知道这个人是如何编译它的),但它以某种方式工作。我不能用我常用的工具重新编译它,所以我正在寻找可以编译它但可能会忽略错误的东西,或者我认为很酷的东西能够在反编译并显示文件源的程序中打开它,允许我编辑它,然后自动重新编译它。有点像 JD-GUI,但您可以编辑文件。

4

2 回答 2

5

我认为 Java 不存在这样的工具。或者至少,不是以有效解决您的问题的形式。

一种更有效的方法是找出导致这些编译错误的原因并修复它。如果您在应该编译的文件中遇到一堆错误(例如,因为它为其他人编译),则很可能是以下情况之一:

  • 您的构建类路径不正确,因此编译器找不到外部依赖项。
  • 您缺少一些包含外部依赖项的 JAR 文件。
  • 您有一些 JAR 文件的错误版本。
  • 您使用了错误版本的 Java SDK。

这些都很容易解决……一旦您知道问题所在。

如果您向我们提供了编译错误的样本,我们可以确认这一点……或提供更好的诊断。


当前一代的反编译器在生成可编译的源代码方面不是很好。此外,这种方法不会解决我上面列出的任何问题。(即使这样做了,你也会通过破解反编译的源代码将自己挖到一个非常深的洞里。)

于 2012-06-18T00:55:41.460 回答
0

尽管 Java 字节码比直接编译为可执行代码的语言更容易反编译,但众所周知,Java 反编译器效率低下,尤其是在处理更复杂的代码时,如果原始源代码使用泛型则更是如此。生成的源代码通常与原始源代码完全没有关系,如果它完全编译的话......

  1. 如果您有该类的一些人工生成的源代码版本,我建议您尝试修复它,而不是尝试对.class文件进行逆向工程。

  2. 如果你有一个.class文件,你仍然可以在子类中扩展或覆盖它的一些方法,本质上是修改它的行为。使用这样的继承并不总是可行的,但它通常有助于第三方黑盒代码......

  3. 您可能想看看Javassist。它是一个字节码操作库,除其他功能外,它还允许您在现有方法中插入 Java 语句。它确实有很多限制,但在某些情况下它可能非常有用......

于 2012-06-18T01:00:24.353 回答