Как я могу преобразовать мою программу Java в файл.exe?
Если у меня есть исходный файл Java (*.java) или файл класса (*.class), как я могу преобразовать его в файл.exe?
Мне также нужен установщик для моей программы.
16 ответов
javapackager
Инструмент Java Packager компилирует, упаковывает и подготавливает приложения Java и JavaFX для распространения. Команда javapackager является версией командной строки.
- документация Oracle
javapackager
Утилиты с JDK. Он может генерировать файлы.exe с -native exe
флаг, среди прочего.
WinRun4J
WinRun4j - это программа запуска Java для Windows. Это альтернатива javaw.exe и предоставляет следующие преимущества:
- Использует INI-файл для указания classpath, main class, vm args, args программы.
- Пользовательское имя исполняемого файла, которое появляется в диспетчере задач.
- Дополнительные аргументы JVM для более гибкого использования памяти.
- Встроенный заменитель иконок для пользовательских значков.
- [больше пунктов следа пули следуют]
- веб-страница WinRun4J
WinRun4J - это утилита с открытым исходным кодом. У этого есть много особенностей.
packr
Упаковывает ваш JAR, ресурсы и JVM для распространения в Windows, Linux и Mac OS X, добавляя собственный исполняемый файл, чтобы он выглядел как собственное приложение. Packr наиболее подходит для приложений с графическим интерфейсом.
- упаковщик README
packr - еще один инструмент с открытым исходным кодом.
JSmooth
JSmooth - это исполняемая оболочка Java. Он создает собственные средства запуска Windows (стандартные.exe) для ваших Java-приложений. Это делает развертывание Java намного более плавным и удобным для пользователя, поскольку оно способно найти любую установленную Java VM самостоятельно.
- сайт JSmooth
JSmooth имеет открытый исходный код и имеет функции, но он очень старый. Последний выпуск был в 2007 году.
JexePack
JexePack - это инструмент командной строки (отлично подходит для автоматизированных сценариев), который позволяет вам упаковать ваше Java-приложение (файлы классов), опционально вместе с его ресурсами (например, GIF/JPG/TXT/ и т. Д.), В один сжатый 32-битный Windows EXE, который работает с использованием среды выполнения Java Sun. Поддерживаются как консольные, так и оконные приложения.
- сайт JexePack
JexePack - пробная версия. Для производственного использования требуется оплата, и exe-файлы, созданные с помощью этого инструмента, будут отображать "напоминания" без оплаты. Также последний релиз был в 2013 году.
InstallAnywhere
InstallAnywhere позволяет разработчикам создавать профессиональные программы установки для любой платформы. С InstallAnywhere вы быстро адаптируетесь к изменениям в отрасли, быстрее выходите на рынок и привлекаете клиентов. И узнайте уязвимость компонентов OSS вашего проекта перед отправкой.
- Установить сайт Anywhere
InstallAnywhere - это коммерческий / корпоративный пакет, который генерирует установщики для программ на основе Java. Вероятно, он способен создавать файлы.exe.
Исполняемые файлы JAR
В качестве альтернативы.exe-файлам вы можете создать файл JAR, который автоматически запускается при двойном щелчке, добавляя точку входа в манифест JAR.
Для дополнительной информации
Отличным источником информации по этой теме является статья Эксельсиора " Преобразование Java в EXE - почему, когда, когда нет и как ".
См. Также сопутствующую статью " Лучшие инструменты преобразования JAR в EXE, бесплатные и коммерческие ".
Launch4j
Launch4j - это кроссплатформенный инструмент для упаковки Java-приложений, распространяемых в виде jars, в легкие собственные исполняемые файлы Windows. Исполняемый файл может быть настроен для поиска определенной версии JRE или использования связанной версии, и можно установить параметры времени выполнения, такие как начальный / максимальный размер кучи. Оболочка также обеспечивает лучшее взаимодействие с пользователем благодаря значку приложения, собственному экрану заставки перед JRE, пользовательскому имени процесса и странице загрузки Java в случае, если не удается найти соответствующий JRE.
- Сайт Launch4j
ОБНОВЛЕНИЕ: GCJ мертв. Он был официально удален из проекта GCC в 2016 году. Даже до этого он был практически заброшен на семь лет, и в любом случае он никогда не был достаточно полным, чтобы служить жизнеспособной альтернативной реализацией Java.
Найдите другой компилятор Java AOT.
GCJ: GNU Compiler for Java может компилировать исходный код Java в машинный код, включая исполняемые файлы Windows.
Хотя не все в Java поддерживается в GCJ, особенно компоненты GUI (см. Какие Java API поддерживаются? Насколько полна поддержка? Вопрос из FAQ). Я не очень много использовал GCJ, но из-за ограниченного тестирования, которое я проводил с консольными приложениями, это выглядит нормально.
Недостатком использования GCJ для создания отдельного исполняемого файла является то, что размер получаемого EXE-файла может быть довольно большим. Однажды я скомпилировал тривиальное консольное приложение в GCJ, и в результате получился исполняемый файл размером около 1 МБ. (Могут быть способы обойти это, о которых я не знаю. Другим вариантом могут быть исполняемые программы сжатия.)
С точки зрения установщиков с открытым исходным кодом, Nullsoft Scriptable Install System - это установщик с поддержкой сценариев. Если вам интересно, есть пользовательские примеры того, как обнаружить наличие JRE и установить его автоматически, если требуемая JRE не установлена. (Просто чтобы вы знали, я не использовал NSIS раньше.)
Для получения дополнительной информации об использовании NSIS для установки приложений Java, пожалуйста, посмотрите на мой ответ на вопрос " Каков наилучший способ распространения приложений Java?"
Вы можете создать командный файл со следующим кодом:
start javaw -jar JarFile.jar
и конвертировать.bat в.exe, используя любой конвертер.bat в.exe.
Мы используем Install4J для создания установщиков для Windows или Unix.
Его легко настраивать до того момента, когда вы захотите написать сценарии для специальных действий, которые нельзя выполнить стандартными диалогами. Но даже при том, что мы настраиваем службы Windows с этим, мы только используем стандартные компоненты.
- установщик + лаунчер
- Windows или Unix
- написанный на Java
- муравейник
- множество настраиваемых стандартных панелей и действий
- опционально включает или загружает JRE
- также может запускать службы Windows
- несколько языков
Я думаю, что Launch4J от той же компании (просто лаунчер - без инсталлятора).
PS: к сожалению, мне не платят за это одобрение. Мне просто нравится этот инструмент.
Последняя версия Java Web Start была улучшена для обеспечения нормальной работы в автономном режиме, а также для "локальной установки". Это стоит посмотреть.
РЕДАКТИРОВАТЬ 2018: Java Web Start больше не поставляется с новейшими версиями JDK. Oracle стремится к "развертыванию вашего приложения локально с помощью модели JRE".
Начиная с JDK14, jpackage заменяет
javapackager
упомянутый в ответе @Jay. Версия для Windows требует Wix 3.0, и довольно просто взять Java-приложение и создать установщик, который предоставляет программу запуска EXE.
Его также можно использовать с jlink для создания урезанного образа среды выполнения Java, который связан с установщиком и содержит только набор модулей, необходимых для поддержки вашего приложения. Пример основного для класса Java:
package exe;
public class Main {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]="+args[i]);
}
}
}
Шаги по сборке в Windows:
mkdir jpackage.input\jars tmp
javac -d tmp src\exe\Main.java
pushd tmp && jar cvf ..\jpackage.input\jars\myapp.jar . && popd
Проверьте, что он запускается:
java -cp jpackage.input\jars\myapp.jar exe.Main X Y Z
Создайте образ времени выполнения с jlink для набора модулей, используемых вашим приложением:
set jlink.modules=java.base
jlink --add-modules %jlink.modules% --strip-debug --no-man-pages --no-header-files --compress=1 --output jpackage.jre
Используйте jpackage для создания установщика с версией приложения на основе даты + часа и включенными всеми свойствами системы - удалите параметры «-XshowSettings:properties» после тестирования:
set appver=%date:~6,2%.%date:~3,2%.%date:~0,2%%time:~0,2%
jpackage --win-console --input jpackage.input --runtime-image jpackage.jre --app-version %appver% --type exe --name "MyApp" --dest jpackage.dest --java-options "-XshowSettings:properties" --main-jar jars\myapp.jar --main-class exe.Main
Запускаем установщик:
jpackage.dest\MyApp-%appver%.exe
Протестируйте приложение:
"C:\Program Files\MyApp\MyApp.exe" ONE 2 THREE
... Prints system properties ...
args[0]=ONE
args[1]=2
args[2]=THREE
Если вам нужно преобразовать все ваше приложение в нативный код, то есть EXE плюс DLL, есть ExcelsiorJET. Я нашел, что это работает хорошо и предоставил альтернативу объединению JRE.
Я бы сказал, что launch4j - лучший инструмент для преобразования исходного кода java (.java) в файл.exe. Вы можете даже связать его с jre для распространения, а exe-файл можно даже обозначить значком. Хотя размер приложения увеличивается, он гарантирует, что приложение будет работать идеально, даже если у пользователя не установлена jre. Это также гарантирует, что вы можете предоставить конкретную JRE, необходимую для вашего приложения, без необходимости установки пользователем отдельно. Но, к сожалению, Java теряет свою важность. Его мультиплатформенная поддержка полностью игнорируется, а финальное приложение поддерживается только для Windows. Но это не имеет большого значения, если вы обслуживаете только пользователей Windows.
Вы можете использовать Джанель. Последний работает как средство запуска приложений или запуска служб (доступно с версии 4.x).
В качестве альтернативы, вы можете использовать некоторый транслятор java-to-c (например, JCGO) и скомпилировать сгенерированные C-файлы в собственный двоичный (.exe) файл для целевой платформы.
Я могу быть прощен за то, что был против преобразования Java-программы в приложение.exe, и у меня есть свои причины. Основным из них является то, что Java-программа может быть скомпилирована в JAR-файл из множества IDE. Когда программа имеет формат.jar, она может работать на нескольких платформах, в отличие от.exe, который запускается только в очень ограниченной среде. Я за идею, что Java-программы не должны быть преобразованы в Exe, если в этом нет особой необходимости. Всегда можно написать.bat-файлы, которые запускают Java-программу, пока это jar-файл.
если действительно необходимо преобразовать его в exe, конвертер Jar2Exe делает это молча, и можно также присоединить библиотеки, скомпилированные вместе с основным приложением.
Предостережение. Многое изменилось в упаковке и развертывании с тех пор, как этот вопрос был задан впервые. Большинство приведенных ответов даже не актуальны для JIGSAW (Java 9+).
Если целью является создание пакетов для конкретной ОС, информация представлена в Oracle Docs Java 17 Packaging Tool User Guide . Это руководство включает документацию по инструменту, который позволяет создавать пакеты для конкретных платформ для Linux, macOS и Windows. Я предполагаю, что специфичные для Windows инструкции должны включать получение файла .exe, поскольку это остается наиболее привычным для пользователей Windows способом установки и запуска приложений.
Мой личный опыт создания exe-файла (для продажи на itch.io) связан с Java Platform, Standard Edition Deployment Guide , который включал использование инструмента Inno Setup 5 . Эта документация старше, предназначена для Java 9. Раздел, непосредственно относящийся к упаковке .exe, находится здесь . В качестве первого шага я использовал
jlink
сделать автономный пакет. В то время, когда я впервые столкнулся с этим, я не мог понять, как работать с моей модульной программой. Но теперь, когда Jigsaw существует уже несколько лет,
jpackage
теперь, вероятно, намного проще в использовании, и это будет мой первый выбор для следующего Java-приложения, которое я могу опубликовать для пользователей Windows.
Проекты Java экспортируются как исполняемые файлы Jar. Когда вы хотите создать файл.exe для java-проекта, вы можете "преобразовать" JAR в EXE (отмечу, что я поставил между кавычками convert, потому что это не совсем так).
Из intelij вы сможете сгенерировать только банку
Попробуйте выполнить следующий пример: https://www.genuinecoder.com/convert-java-jar-to-exe/