如何从 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,您可以使用正确的软件连接到它。
- 下载FernFlower.jar:http://the.bytecode.club/fernflower.jar
- 文档:http://the.bytecode.club/fernflower.txt
- 存储库:https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler
运行 "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 来提取文件。
- 打开 Eclipse
- 将 jar 文件粘贴到任何项目中。
- 右键单击 Package Explorer 下的 jar 文件。
- 将文件解压到所需位置。
我很困惑。我下载了一个 *.jar 文件作为一个软件。所以,我想把源码提取出来看看
我使用了命令jar xf filename.jar
返回了另外两个 *.jar
文件和一个 *.class
文件。我仍然无法使用标准文本编辑器在终端中打开它们。
难道这不是开源软件?是否有其他方法可以查看此处已完成的操作?
jar 文件可能 包含源代码,但更常见的是只包含 class 文件。 Class 文件通常用于执行,不用于提取源。
您可以将 class 文件反编译为源代码,但反编译后的代码将没有原始源代码那么有用。
如果它是开源的,请返回您下载 jar 文件的站点并查找源代码。它可能在要下载的 Zip 文件中,它可能在要下载的 jar 文件中,它可能在某种存储库中,例如 Git,您可以使用正确的软件连接到它。
- 下载FernFlower.jar:http://the.bytecode.club/fernflower.jar
- 文档:http://the.bytecode.club/fernflower.txt
- 存储库:https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler
运行 "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 来提取文件。
- 打开 Eclipse
- 将 jar 文件粘贴到任何项目中。
- 右键单击 Package Explorer 下的 jar 文件。
- 将文件解压到所需位置。