Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Eclipse:有没有办法区分jar和项目?_Java_Eclipse - Fatal编程技术网

Java Eclipse:有没有办法区分jar和项目?

Java Eclipse:有没有办法区分jar和项目?,java,eclipse,Java,Eclipse,我有一个.jar文件,它代表了一个我试图处理的插件。这是插件的旧版本,而更新版本是由其他人编写的。我有这个新版本作为一个项目 较新的项目充满了.java文件,而旧的插件充满了.class文件。我可以将jar作为项目导入,但它仍然是所有类文件。类文件和java文件之间的差异不是特别大,我想看看它们之间的差异。但是,当我现在这样做时,文本比较将.class文件从编辑器中的正常表示形式更改为二进制表示形式。我知道如果它们是同一类型的文件,我可以选择这两个并点击“比较”。如何在.class和.java文

我有一个.jar文件,它代表了一个我试图处理的插件。这是插件的旧版本,而更新版本是由其他人编写的。我有这个新版本作为一个项目

较新的项目充满了.java文件,而旧的插件充满了.class文件。我可以将jar作为项目导入,但它仍然是所有类文件。类文件和java文件之间的差异不是特别大,我想看看它们之间的差异。但是,当我现在这样做时,文本比较将.class文件从编辑器中的正常表示形式更改为二进制表示形式。我知道如果它们是同一类型的文件,我可以选择这两个并点击“比较”。如何在.class和.java文件之间实现这一点,或者如何将两者转换为另一个文件,以便能够对两者进行比较


最好的方法是,我可以通过将.class文件转换为.java文件来编辑jar。

您似乎需要一个反编译器来将java.class文件(字节码)转换回原始的.java源文件(文本)。然后您可以比较这两个文本文件。这似乎很有用:

您可以使用烟尘(http://www.sable.mcgill.ca/soot/)这样做。可以采用两种方法:

  • 在So烟尘中使用Dava将.class文件反编译为.java文件,然后比较.java文件
  • 将.class和.java文件转换为烟尘中名为Jimple的中间表示形式,并比较Jimple文件
  • 我认为第二种方法更合理,因为:

  • 在第一种方法中,一些Java文件是手动开发的,而另一些是机器生成的。对它们进行区分会产生难以阅读的结果
  • Jimple表示非常接近Java源代码,并且相对容易阅读。在这种统一的、机器生成的格式上读取差异结果要容易得多。另外,若需要,可以将所有Jimple文件转换回Java源代码(这是第三种方法…)

  • 因为它是一个插件,所以我可以将它作为插件项目导入,并且有一个包含源文件夹的框。当我检查是否访问了.java代码并成功地进行了区分时。

    我对编译器不是特别了解,但反编译不会因为编译器优化而产生不同的源代码吗?是的,有时反编译不会产生完全相同的源代码。也许对于您正在进行的差异类型来说,这已经足够了?您当然不能按原样将字节码与源文件区分开来。