Перекомпилировать в * .Jar После декомпиляции и исправления кода? - PullRequest
11 голосов
/ 07 июля 2011

У меня есть файл myfile.jar.Я использую jd-gui для декомпиляции всех * .class в папке в myfile.jar.Я получаю много файлов * .java во многих папках

После исправления некоторого кода в некоторых * .java, теперь я хотел бы перекомпилировать все * .java обратно в * .class и упаковать всю папку обратно в myfile.jar.

Как мне это сделать?

(Я впервые играю с кодом Java.)

Ответы [ 2 ]

10 голосов
/ 07 июля 2011

Вам необходим Java Development Kit (JDK). Это включает компилятор Java (обычно называемый javac) и архиватор jar.

Предполагая, что у вас есть java-файлы в каталоге с именами src (тогда в соответствии с их структурой пакета), вы будете использовать

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.)

2 голосов
/ 07 июля 2011

В общем, для компиляции Java Code в классы вам нужен исполняемый файл javac, который поставляется вместе с JDK.

Unix:

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

Windows

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

После того, как вы скомпилировали код, вы можете создать jar (это zip-файл, содержащий все классы и некоторые метаданные о создателе, версии и т. Д.).

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

Вы можете прочитать больше о различных опциях, которые вы можете использовать с javac и jar . Использование такого инструмента, как ant, упрощает компиляцию исходного кода и создание jar-файлов. См. Задачи javac и jar .

...