Зачем конвертировать CLASS в EXE?
Байт-код JVM - это платформонезависимый набор инструкций, интерпретируемый во время выполнения виртуальной машиной Java. Windows .exe содержит нативный машинный код x86/x64, исполняемый непосредственно процессором. Это принципиально разные форматы без общего набора инструкций, что делает механический перевод в нативный исполняемый файл невозможным.
Способы конвертации CLASS в EXE
jpackage (JDK 14+) FREE
Сначала упакуйте ваши файлы .class в JAR с помощью jar cfe app.jar MainClass *.class, затем запустите jpackage --input . --main-jar app.jar --name MyApp --type exe, чтобы создать установщик Windows, который включает в себя частную среду JRE.
Launch4j FREE
Сначала упакуйте свои классы в JAR, а затем используйте Launch4j, чтобы обернуть JAR в легкую оболочку .exe, которая находит установленную JRE во время запуска.
Об этих форматах
Файл CLASS представляет собой скомпилированный байт-код Java - результат работы javac из исходного файла .java. Чтобы запустить его, вам необходимо установить Java (JDK), а затем…
Открыть детали .CLASS →Файл EXE - это исполняемая программа для Windows. В Windows дважды щелкните по нему, чтобы запустить. На Mac или Linux используйте CrossOver или Wine - EXE не запускаются нативно вне…
Открыть детали .EXE →Качество и на что обратить внимание
- При любом практическом подходе Java все равно работает внутри -
jpackageпоставляется с частной JRE, Launch4j требует наличия установленной; JVM не является опциональной для байт-кода Java. - Сайты, утверждающие, что конвертируют произвольные файлы
.classв подлинный автономный.exe, вводят в заблуждение; такого инструмента не существует. - Чтобы просмотреть или восстановить исходный код из
.class, используйте JD-GUI или CFR для декомпиляции обратно в.java.
Часто задаваемые вопросы
Можно ли переименовать файл .class в .exe и запустить его?
.class начинается с магических байтов Java CA FE BA BE, а не с валидного заголовка PE.Что на самом деле создает jpackage?
Можно ли обернуть один файл .class без целого проекта?
public static void main; библиотечные классы и фрагменты требуют предварительной упаковки всех зависимостей в JAR.