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

时间:2011-07-06 23:08:17

标签: java jar javac

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

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

我该怎么做?

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

2 个答案:

答案 0 :(得分:10)

您需要一个Java Development Kit(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。)

答案 1 :(得分:2)

通常,要将Java代码编译为类,您需要JDK附带的javac可执行文件。

Unix的:

${JAVA_HOME}/bin/javac -d OUTPUT_DIRECTORY SOURCE_FILES

视窗:

%JAVA_HOME%\bin\javac.exe -d OUTPUT_DIRECTORY SOURCE_FILES

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

${JAVA_HOME}/bin/jar cf output.jar INPUT_FILES

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