Перекомпиляция в *.Jar После декомпиляции и исправления кода?

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

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

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

(Это мой первый раз, когда я играл с Java-кодом.)

Ответ 1

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

Предполагая, что у вас есть 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

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

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

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