-4

我想解压缩我正在使用的 jar 库,如果它的核心功能更新为 GitHub 上提供的内容,请检查类。

如何解压缩 .jar 文件?

更新:

如果您直接解压缩,您将无法在没有附加源代码的情况下获得类 .txt。

感谢 alegen 使用 Java Decompiler 的方法,您可以反编译类。

4

3 回答 3

2

JAR用 WinRAR打开文件,但除非人家也打包了source code,否则你只会找到.class包含bytecode. 您还必须使用decompiler; 我通常使用JD Java Decompiler

于 2012-06-11T14:52:02.757 回答
2

您可以使用各种工具从 JAR 文件中提取文件,包括纯 ZIP 文件工具……当然还有jar作为 JDK 一部分提供的命令。

听起来您真正的问题是您想反编译 JAR 文件中的 .class 文件,以便您可以将它们与一些 Java 源代码进行比较。

好吧,坏消息是它不会起作用……尤其是在大规模的情况下。是的,有些反编译器会(在好日子)产生类似于 Java 的东西。然而:

  • 反编译的 Java 看起来与用于生成 .class 文件的原始源代码完全不同。将反编译的文件与原始源代码(或基于原始源代码的东西)进行比较将是一个乏味且困难的手动过程。

  • 反编译的代码很有可能甚至不是有效的(可编译的)Java。

更好的方法可能是在 GitHub 上编译源代码并尝试比较 .class 文件的两个版本。然而,即使这样也不是直截了当的,因为:

  • .class 文件包含时间戳和其他依赖于构建路径、编译开关等的东西。在比较 .class 文件时,您必须弄清楚如何消除这种“噪音”。

  • 不同版本的 Java 编译器会产生不同风格的类文件。

  • 即使类文件版本号相同,生成的字节码也可能存在编译器版本特定的差异。


对于小规模的比较,反编译可能会......只要你准备好解决这个问题。您还可以使用javap打印类文件中的字节码并比较javap输出。

于 2012-06-11T15:04:22.240 回答
1

所以你要做的是检查两个jar是否相同,以确定github上的方法与你jar中的方法相同吗?

我认为你在这里试图解决错误的问题。你应该做的是从 github 上查看代码并自己构建它。在项目的根目录中应该有一个名为 README、INSTALL 或类似文件的文件。

现在,当然,您可能不想要项目的最新版本,您可能想要最新的稳定版本或诸如此类的东西,这是完全可行的:只需从 git 下载您想要的版本,然后自己构建。您现在拥有代码和 jar。

如果您这样做,您可以确保代码与 jar 匹配,并且不需要 icky 反编译,只需快速 make 或 ant 稍后,如自述文件所指定。

于 2012-06-11T16:16:45.490 回答