解压java类文件并与svn进行比较



SVN中有正常的java文件。我们对这些文件进行了一些更改,但碰巧这些文件丢失了(它们不在SVN中)。但是我们有使用新更改的文件生成的类文件。

我们可以使用类文件,对它们进行反编译,并将其与SVN进行比较吗。最简单的方法是什么?

大约有400个已更改的文件。因此,逐一比较是不可行的。

我正在寻找任何工具或脚本。

还有没有反编译器,可以一次反编译整个文件夹?

感谢

对于反编译,请使用最常用的工具JAD。不过比较起来有点棘手。我建议采用以下方案:

  1. 从SVN获取最新源代码
  2. 构建它
  3. 分解它(!)
  4. 以包含一些修改但没有源代码的编译类为例
  5. 也分解它们
  6. 比较两个反编译的源目录

为什么要编译和反编译原始源代码?因为JAD产生了相当好的结果,但它永远不会产生与所使用的完全相同的源。因此,如果您想在比较原始源和反编译源时避免麻烦(并快速确定实际差异),则必须比较两个JAD输出,而不是原始源和合成JAD输出。

我希望有两个目录结构进行比较对你来说不会是个问题。您可以在Windows上使用Total Commander,也可以在Linux上使用各种实用程序/脚本,如:

$ diff -r dir1 dir2

jad可以反编译整个文件夹,但结果取决于几个因素。首先,JAD只支持Java4。Java5及以上版本将包含JAD不理解的奇数字节代码块。

如果代码是用调试符号编译的,你可以重新排列行号(jadclipse插件可以做到这一点),但JAD本身不能做到

如果使用-g:source编译代码,则类文件包含完整的源代码。乍一看,我不知道如何获得它,但像javap(JDK附带)或ASM这样的工具应该可以让你获得它

如果在生成类文件时没有使用模糊处理,则可以将反编译的源文件与原始文件进行比较。然而,自动比较将是困难的,因为例如,由于编译器优化,反编译的源代码通常与原始源代码略有不同。就我个人而言,我使用jad作为反编译器,但我不确定你能否一次性提供一个完整的文件夹。

我使用以下命令(jad反编译器)一次性编译了文件夹中的所有类文件。

             jad -o -r -sjava -dsrc tree/**/*.class 

使用jd-gui,非常好的反编译器,但编译。。。这将是痛苦的。

现在我正是这样做的,使用http://java.decompiler.free.fr/反编译和超越比较(http://www.scootersoftware.com/)以比较包和文件。与编译和反编译的实际版本(svn)进行快速比较,检查哪些文件(和哪些部分)是最新的,这看起来是一个好主意。

相关内容

  • 没有找到相关文章

最新更新