Ответ
Результат компиляции
Стандартный компилятор javac преобразует .java файлы в байт-код, сохраняемый в файлы с расширением .class. Эти файлы не являются нативными исполняемыми файлами и требуют для запуска JVM (Java Virtual Machine).
javac Main.java # Создает Main.class
java Main # Запуск байт-кода в JVM
Создание нативного исполняемого файла
Для создания самостоятельного исполняемого файла (.exe, .app, .deb и т.д.) используются следующие инструменты:
-
jpackage(JDK 14+) – стандартный инструмент для создания нативных установщиков.# Создает .msi для Windows или .deb для Linux jpackage --name MyApp --input ./lib --main-jar app.jar --main-class com.example.Main -
jlink(для модульных приложений) – создает минимальную пользовательскую JVM, включающую только необходимые модули.jlink --module-path $JAVA_HOME/jmods:mods --add-modules com.myapp --output custom-jre -
GraalVM Native Image – компилирует Java-приложение Ahead-of-Time (AOT) в нативный бинарник, не требующий JVM.
native-image -jar app.jar myapp-executable -
Сторонние утилиты (устаревший подход):
- Launch4j – обертка для Windows, создающая
.exe-файл, который запускает jar-архив. - Сборка в скрипты (
.sh,.bat), которые вызываютjava -jar.
- Launch4j – обертка для Windows, создающая
Выбор инструмента зависит от требований: jpackage — для установщиков, jlink — для уменьшения размера, GraalVM — для максимальной производительности и минимального времени запуска.