反编译修复代码后重新编译成\*.Jar?

新手上路,请多包涵

我有一个 myfile.jar 文件。我使用jd-gui反编译了myfile.jar中一个文件夹中的所有*.class。我在许多文件夹中得到许多 *.java 文件

在修复了一些*.java 中的一些代码之后,现在我想将所有*.java 重新编译回*.class,并将整个文件夹打包回myfile.jar。

我该怎么做呢?

(这是我第一次玩 java 代码。)

原文由 sandy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 685
1 个回答

您需要一个 Java 开发工具包 (JDK)。这包括一个 Java 编译器(通常命名为 javac )和一个 jar 归档器。

假设您在目录名称 src 中有 java 文件(然后根据它们的包结构),您将使用

javac -d classdir -sourcepath src src/*.java src/*/*.java src/*/*/*.java ...

编译所有文件。 (调整*的个数为目录层数,如果你只有一些文件夹里有源文件,也可以单独列出来。如果有些类依赖其他的,你可以省略其他的,编译器会发现并自动编译它们。)

如果程序需要外部库,请为它们提供 -classpath 参数。

现在我们在目录 classdir 中拥有所有已编译的类。查看您的原始 jar 文件:其中的任何非类文件也应该复制到您的 classdir 中(在它们之前的相同相对目录中)。这最值得注意的包括 META-INF/MANIFEST.MF

然后我们从中创建一个新的 jar 文件。 jar 工具包含在 JDK 中。

 jar cfm mypackage.jar classdir/META-INF/MANIFEST.MF -C classdir .

(您也可以简单地使用您信任的 zip 程序并将生成的 zip 文件重命名为 .jar。如果您的文件具有非 ASCII 名称,请确保将文件名编码设置为 UTF-8。)

原文由 Paŭlo Ebermann 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题