重新编译为*.Jar反编译并修复代码后?

san*_*ndy 12 java jar javac

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

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

我该怎么做呢?

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

Paŭ*_*ann 10

您需要一个Java Development Kit(JDK).这包括Java编译器(通常命名javac)和jar存档器.

假设你有一个目录名中的java文件src(然后根据它们的包结构),你会使用

javac -d classdir -sourcepath src src/*.java src/*/*.java src/*/*/*.java ...
Run Code Online (Sandbox Code Playgroud)

编译所有文件.(将*的数量调整为目录级别的数量.如果你只有一些包含源文件的文件夹,你也可以单独列出它们.如果某些类依赖于其他类,你可以省略其他类,编译器会找到并且自动编译它们.)

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

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

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

jar cfm mypackage.jar classdir/META-INF/MANIFEST.MF -C classdir .
Run Code Online (Sandbox Code Playgroud)

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


Moe*_*tar 2

一般来说,要将 Java 代码编译成类,您需要javacJDK 附带的可执行文件。

Unix:

${JAVA_HOME}/bin/javac -d OUTPUT_DIRECTORY SOURCE_FILES
Run Code Online (Sandbox Code Playgroud)

视窗:

%JAVA_HOME%\bin\javac.exe -d OUTPUT_DIRECTORY SOURCE_FILES
Run Code Online (Sandbox Code Playgroud)

编译完代码后,您可以创建 jar(这是一个 zip 文件,其中包含所有类以及有关创建者、版本等的一些元数据)。

${JAVA_HOME}/bin/jar cf output.jar INPUT_FILES
Run Code Online (Sandbox Code Playgroud)

您可以阅读有关可与javacjar一起使用的不同选项的更多信息。使用像 ant 这样的工具可以更轻松地编译源代码和创建 jar。请参阅javacjar任务。