如何从 Mac 上的 *.jar 文件中提取源代码?

How to extract the source code from a *.jar file on a Mac?

我很困惑。我下载了一个 *.jar 文件作为一个软件。所以,我想把源码提取出来看看

我使用了命令jar xf filename.jar

返回了另外两个 *.jar 文件和一个 *.class 文件。我仍然无法使用标准文本编辑器在终端中打开它们。

难道这不是开源软件?是否有其他方法可以查看此处已完成的操作?

jar 文件可能 包含源代码,但更常见的是只包含 class 文件。 Class 文件通常用于执行,不用于提取源。

您可以将 class 文件反编译为源代码,但反编译后的代码将没有原始源代码那么有用。

如果它是开源的,请返回您下载 jar 文件的站点并查找源代码。它可能在要下载的 Zip 文件中,它可能在要下载的 jar 文件中,它可能在某种存储库中,例如 Git,您可以使用正确的软件连接到它。

运行 "java -jar fernflower.jar -dgs=true JarToDecompile.jar DecompiledJar"

这就是 Intelli-J 和 Android-Studio 反编译器所做的。

注意:Fernflower 将 .java 文件提取到 .jar 文件。您可以将 jar 文件解压缩为常规 zip 文件(如果您在 OSX 上的 Archive Utility 版本允许它 - 它不会在 OSX Sierra 上为我做,但可以工作El Capitan) 或者你可以做 jar xf DecompiledJar 它会提取它。

示例(全部在一个命令中——多个命令由 && 分隔):

java -jar fernflower.jar -dgs=true JarToDecompile.jar DecompiledJar && cd DecompiledJar && jar xf DecompiledJar.jar && cd ../

简单的解决方案:

如果你有eclipse,只需将jar 文件添加到当前项目的类路径中,你就可以看到jar 中的所有包和源代码。您无需安装和使用这些命令。您将更好地查看所有文件

另一种解决方案是使用 JD for OSX (http://java-decompiler.github.io/)。 对于带有 BigSur 版本的 Java 11,确保通过将行 export JAVA_HOME=$(/usr/libexec/java_home -v11) 添加到文件 /Applications/JD-GUI.[= 来修复常见错误16=].sh 按照 https://github.com/java-decompiler/jd-gui/issues/332

中的建议

添加到 @saravanan 提供的解决方案中。

另一个解决方案是使用 Eclipse IDE 来提取文件。

  1. 打开 Eclipse
  2. 将 jar 文件粘贴到任何项目中。
  3. 右键单击 Package Explorer 下的 jar 文件。
  4. 将文件解压到所需位置。