我想解压缩我正在使用的jar库检查类,如果它的核心功能更新为GitHub上显示的内容。
如何解压缩.jar文件?
更新
如果你直接解压缩,你将无法获得类.txt而没有附加源代码。
感谢alegen使用Java Decompiler的方法,你可以反编译类。
答案 0 :(得分:2)
使用WinRAR打开JAR
文件,但除非人们打包source code
,否则您只会找到包含.class
的{{1}}个文件。您还必须使用bytecode
;我通常使用JD Java Decompiler。
答案 1 :(得分:2)
您可以使用各种工具从JAR文件中提取文件,包括普通的ZIP文件工具......当然还有作为JDK一部分的jar
命令。
听起来你的真正的问题是你想要反编译JAR文件中的.class文件,以便你可以将它们与一些Java源代码进行比较。
好吧,坏消息是它不会起作用......特别是在大规模的情况下。是的,有一些反编译器(在美好的一天)会产生类似于Java的东西。但是:反编译的Java看起来不像用于生成.class文件的原始源代码。将反编译的文件与原始源代码(或基于原始源代码的东西)进行比较将是一个繁琐且困难的手动过程。
反编译代码很可能甚至无效(可编译)Java。
更好的方法可能是在GitHub上编译源代码并尝试比较.class文件的两个版本。然而,即使这样也不是直截了当的,因为:
.class文件包含时间戳,以及依赖于构建路径,编译开关等的其他内容。在比较.class文件时,你必须弄清楚如何消除这种“噪音”。
不同版本的Java编译器会产生不同风格的类文件。
即使类文件版本号相同,生成的字节码中也可能存在编译器版本特定的差异。
对于小规模比较,反编译可能会......如果您准备好解决问题。您还可以使用javap
打印类文件中的字节码,并比较javap
输出。
答案 2 :(得分:1)
那么你想要做的是检查两个罐子是否相同,以确定github上的方法与罐子里的方法相同?
我认为你在这里试图解决错误的问题。你应该做的只是从github检查代码并自己构建它。在项目的根目录中应该有一个名为README,INSTALL或类似的文件。
现在,当然,您可能不需要最新版本的项目,您可能需要最新的稳定版本或诸如此类的东西,这是完全可行的:只需从git下载您想要的版本,然后自己构建。你现在有了代码和一个罐子。
如果你这样做,你就可以确保代码与jar匹配,并且不需要任何icky反编译,只需要一个快速的make或ant稍后,如自述文件所指定的那样。