Как превратить файл jar в exe

Обновлено: 02.07.2024

Я хочу преобразовать .jar в .exe для Microsoft. Есть ли какой-нибудь программный конвертер для этого?

Также, если есть один для Mac и Linux, я был бы признателен за эти предложения.

4 ответа

Launch4j работает как в Windows, так и в Linux /Mac. Но если вы работаете в Linux /Mac, есть способ встроить jar-файл в сценарий оболочки, который выполняет автозапуск, поэтому у вас есть только один исполняемый файл:

Затем вы создаете исполняемый файл из вашего jar-файла:

Он работает так же, как и launch4j: потому что у jar есть формат zip , заголовок которого находится в конце файла. Вы можете иметь любой заголовок (двоичный исполняемый файл или, как здесь, скрипт оболочки) и запустить java -jar <myexe> как <myexe> - допустимый файл zip /jar.

Оболочка JSmooth .exe

JSmooth предоставляет различные оболочки для вашего Java-приложения, каждое из которых имеет свое поведение: выберите свой вкус!

JarToExe 1.8 Jar2Exe - это инструмент для преобразования jar-файлов в exe-файлы. Ниже приведены основные функции, описанные на их веб-сайте:

Может генерировать «Консоль», «Windows GUI», «Служба Windows» трех типов файлов .exe.

Сгенерированные файлы .exe могут добавлять значки программ и информацию о версии. Созданные файлы .exe могут зашифровать и защитить Java-программы, при запуске программы временные файлы не будут создаваться.

Сгенерированные файлы .exe обеспечивают поддержку значков на панели задач. Сгенерированные файлы .exe обеспечивают поддержку записи журнала системных событий. Сгенерированные файлы службы Windows .exe могут устанавливать /удалять самостоятельно, а служба поддержки приостанавливает /продолжает.

Палач

Упакуйте свое Java-приложение как jar, и Executor превратит jar в файл Windows .exe, неотличимый от нативного приложения. Двойной щелчок по файлу .exe вызовет среду выполнения Java и запустит ваше приложение.

Если ваша программа имеет «общедоступный некоммерческий характер» и имеет «общедоступный веб-сайт, соответствующий «Основные стандарты качества» , тогда вы можете попробовать и получить бесплатную лицензию Excelsior. Если это не так, то это дорого, но все же жизнеспособный вариант.

Несмотря на то, что это противоречит общей политике SO по этим вопросам, похоже, именно этого искренне желает OP:

Если вы хотите, вы также можете попробовать создать соответствующий пакетный файл или файл сценария, содержащий одну строку:

Пользователям Windows привычнее использовать исполняемое приложение в виде exe-файла, нежели архивного jar-файла. Разработчики настольных java-приложений могут плагином launch4j не только обернуть исполняемый архивный jar-файл в оболочку exe-файла, но и включить в него иконку, автора, версию. Также данный плагин позволяет определить минимальную версию используемой JRE. В данной статье рассмотрим использование maven-плагина launch4j для получения exe-файла.

Описание java-примера

В качестве java-примера используем pluggable решение, включающее несколько jar-файлов. На следующем скриншоте представлена структура нашего экспериментального примера. Три файла, выделенные красным прямоугольником и относящиеся к задаче создания исполняемого exe-файла, рассматриваются ниже.


Несколько слов о структуре примера. Описание с исходными кодами данного java-примера представлено на странице Pluggable решение. Желающие могут поближе познакомиться с технологией динамической загрузки jar-файлов (классов), открыв страницу с подробным описанием исходников. На «выходе» данного примера получаем главный исполняемый модуль plugin-loader.jar, который использует common/plugin-api.jar для загрузки при необходимости (вызове) плагинов plugins/hello1.jar и plugins/hello2.jar.

Графический интерфейс примера, представленный на следующем скриншоте, включает 2 кнопки с надписями 'Plugin1' и 'Plugin2'. При нажатии на одну из кнопок приложение подгружает необходимый плагин, который меняет надпись на кнопке.


Изменения в исходных кодах

Необходимо отметить, что в модули PluginLoader.java и Boostrap.java были внесены изменения. Так в PluginLoader.java добавлена метка JLabel с отображением в интерфейсе версии Java :

В класс Boostrap.java внесены изменения, связанные с чтением классов (*.class) из jar'ника, а не из директории bin, как это представлено в исходных кодах. Если этого не сделать, то придётся с собой ещё «таскать» и директорию bin с class'ами.

Листинг класса Boostrap.java

В главный класс Boostrap внесены изменения определения url : ниже исходной закомментированной строки размещается код определения url в jar-файле.

Оборачивание исполняемого jar в exe-файл

Обычно плагин maven.plugins.launch4j включают в проектный pom.xml файл, в котором формируется и исполняемый jar-файл. Поскольку основная цель данной статьи наглядно продемонстрировать возможность оборачивания jar в exe, то уберем из проектного pom.xml все лишнее, что связано с формированием jar-файла. Правильнее сказать создадим такой pom.xml, который и будет решать основную задачу оборачивания jar в exe.

На следующих скриншотах представлены вкладки свойств созданного PluginLoader.exe.



Вы можете скачать исходники рассмотренного примера (40.1 Кб), включающего как jar-файлы, так и exe-файл с проектными pom.xml.

Процесс автоматизации сборки данного примера рассмотрен на странице описания Многомодульного maven проекта.

Я хочу создать файл JAR, и я хочу запустить его на клиентской машине.Итак, у меня есть пара вопросов:

  1. как преобразовать файл JAR в EXE-файл?
  2. как я могу зашифровать содержимое файла JAR? Файл jar может быть извлечен с помощью WinRAR, а классы могут быть декомпилированы с помощью любого декомпилятора Java.
  3. как я могу создать установщик? У моих клиентов нет JVM, и я не хочу отправлять JDK или JRE, потому что у них есть большой размер.

смотрите здесь: Java в Exe. Это также объясняет, какие веские причины для этого, и когда вы не должны.

вы не можете шифровать двоичные файлы, поскольку машина должна их понимать. Тем не менее, оптимизированный исполняемый файл очень трудно декомпилировать, в то время как простые файлы классов легко.

Если у вас есть exe есть установщики достаточно.

JSmooth-это приложение, которое обернет вашу банку в exe

Он также позволяет проверить, доступна ли правильная версия JRE в системе, которую вы развертываете в

Что касается 1): я думаю, вы не можете. Там могут быть инструменты, но вы не можете сделать это со стандартными инструментами, поставляемыми с JDK, так как это уничтожит независимость платформы. (См. другие ответы, содержащие ссылки на такие сторонние инструменты)

как для 3): Используйте InnoSetup для создания установщика. Включите JRE в setup и позвольте InnoSetup установить его на лету.

вы не можете предотвратить декомпиляцию. Лучшее, что вы можете сделать, это сделать это сложнее или более трудоемким. В качестве ответа на ваш вопрос, я считаю, что вы можете использовать gcj для компиляции Java в EXEs.

может быть Excelsior JET удовлетворит ваши потребности.) ИМХО очень зрелый продукт.

1) я недавно пробовал программу jarToExe и как это. Некоторые функции:

  • бесплатная базовая версия или очень дешево ($30) на "предприятие"
  • возможность иметь диспетчер задач windows список имя вашего приложения вместо java по умолчанию.exe
  • дополнительные запутывания
  • runtime проверьте, что java установлен

2) Вы можете сделать это сильнее перепроектировать, используя должны быть или другой обфускатор

3) nsis - это очень мощный, бесплатный язык сценариев для создания установщиков для Windows. Хорошая документация на сайте wiki и поддержка переполнения стека.

Launch4j работал на меня, пока некоторые инструменты не работали. У него также есть хороший гид здесь.

надеюсь, что это поможет!

мы используем 7zip SFX install launcher. Это простой инструмент с открытым исходным кодом. Он упакует ваш jar, версию jre, поэтому для систем установки не обязательно устанавливать jre и самораспаковывающуюся версию 7zip. Вот это учебник что объясняет, как связывать и GitHub ссылке Проект не поддерживается, но отлично работает (протестирован до Java 1.8)

Итак, ваш проект дожил до продакшена и хотелось бы стартовать его вместе с системой, а не поднимать ручками каждый раз. Но как нам это сделать с обычным jar’ником?

Есть кучка вариантов:

I) Положить в стартап винды батник с запуском java -jar или экзешник (предварительно сделав из jar’а exe-файл).

Это решит проблему, вот только запускаться ваше приложение будет в лучшем случае при первом входе в систему любого юзера (если кинуть в стартап для all users), а, как известно, хороший админ на сервер не лазит.

II) Сделать task в винде, стартующий батник при старте системы.

Этот ва р иант решает проблему с запуском на ура, вот только манипуляция приложением на этом заканчивается, ни старт-стопа тебе в любое время, ни перезапуска по ошибке.

III) Можно запустить jar’ник в виде службы винды с помощью sc.exe (есть ещё Srvinstw.exe — гуёвая версия, но мы же тру-программисты и должны использовать командную строку).

Это маленькая программа из Resource Kit для создания служб из exe-шников.

Но у нас ведь jar-файл?! Не беда! Есть варианты на попробовать:

1) запускать напрямую java.exe -jar с параметрами.

2) сделать из jar’a exe-file и превратить его в службу.

3) юзать srvany.exe

а) запускать из него java.exe –jar

б) написать bat-ник с запуском java -jar и запускать его

IV) Заюзать сторонний софт.

Разгребём эту кучку, пропустив первые 2 пункта как наименее интересные.

Для начала напишем небольшое приложение c блэк-джеком и ресурсами, зависимыми от передаваемых параметров, дабы прочувствовать максимум боли в агонии попыток заставить его работать в виде службы.

- ругаться на то, что параметров нет

- в зависимости от них читать те или иные файлики настроек

- парсить внешней библиотекой эти настройки

- каждые 5 секунд сыпать в лог снова эти же настройки

Пример приложения можно посмотреть здесь:

Моим результатом будет executable jar-файл, с зависимыми библиотеками и ресурсами снаружи в отдельной папке. Вы можете сделать, как хотите, поэкспериментируйте.

Итак, чтобы ознакомиться со справкой sc достаточно ввести

Результатом будет «Ошибка. Неопознанная команда» и далее справка по возможным командам.

А) Создаём службу с java.exe –jar

У меня jdk таскается за собой, чтобы не зависеть от имеющихся на серверах версий и для придачи моей программе солидности в виде большого объёма. Полный путь к java.exe в случае наличия её в переменных окружения, не обязателен. Стоит отметить одну назойливую и малозаметную особенность: « binPath= » — после любого параметра (тут binPath) сразу идёт знак равенства, а после него обязательно пробел перед значением этого параметра.

Отлично, служба создана, запускаем её! Упс.


(у меня TestService будет иметь в примерах разные цифры, т.к. не всегда служба удалялась сразу, иногда она только помечалась на удаление)

Смотрим на всякий случай, не появился ли лог нашего приложения. А он-таки есть! Только крохотный, содержащий инфу с момента попытки запуска службы до момента выдачи ошибки. Что произошло? А вот что:

- старт службы запустил java.exe с нужными параметрами

- наше приложение начало свою работу

- менеджер служб винды ждёт некоторое время ответа от java.exe о её успешном (или нет) запуске

- но java.exe ничего не возвращает, потому что она никому ничего не должна

- менеджер служб отсчитал положенные по таймауту секунды и отстрелил джаву

Вывод: не каждый exe-шник одинаково полезен для запуска в виде службы. Нельзя просто так взять и запустить любой exe-шник, он должен быть специально заточен под виндовые службы (как минимум возвращать некие данные о своём запуске).

А может javaw попробуем? Попробуйте, вот только double-V в имени не означает двойную победу.

Б) Создаём службу с cmd /c java.exe -jar

А что если запустить cmd в cmd в cmd и в ней бахнуть джаву? Закроется вся цепочка? Начнём с малого — запустим просто джаву из cmd, а саму cmd укажем как binpath при запуске службы:

Точно также отваливаемся по тайм-ауту, вот только завершает свою никчёмную жизнь лишь процесс cmd, а наше мега джава приложение продолжает дышать и радовать.

Работает? Да! Как полноценная служба? Да ни в зуб!

Но положим наш джарник в папку с пробелами, чтобы ещё немного поэкранировать насладиться созиданием наклонных палочек подле кавычек:

Заглянем в реестр:


(DeleteFlag был установлен мной, так что просто считайте, что не видели его здесь)

Выглядит неплохо, только параметры бы ещё в кавычки запихнуть для полного счастья.

Вывод: трюки — это хорошо, но не всегда полезно на все 100%.

В) Создаём службу с srvany.exe java.exe –jar

srvany.exe — это тоже программулина из Resource Kit. Её работа проста — запускать указанное приложение. Т.е. мы регистрируем srvany.exe в качестве службы с параметрами, указывающими путь к нашей программе. Порядок: стартуем службу → стартует srvany → стартует наше приложение.

Добавим параметры для запуска srvany:

Стартуем.. наблюдаем.. ждём.. наблюдаем.. работает!! Всё? Это конец? Или чего-то не хватает? Зачем придумывали сторонний софт (кроме цели самообучения и рекламы)? А вы попробуйте убить процесс или вызвать в нём ошибку. А мы плавно перейдём к следующему пункту.

Вывод: srvany работает, но хромает ловля ошибок.

Краткий список разного софта:

- jsvc (версия для извращенцев: «It can run on Win32 via the Cygwin emulation layer» (с))

Вот последний-то мы и используем. Для ленивых повторим вопрос: так зачем нам сторонний софт? Для них же ответ есть прямо с сайта nssm:

«srvany and other service helper programs suck because they don’t handle failure of the application running as a service. If you use such a program you may see a service listed as started when in fact the application has died. nssm monitors the running service and will restart it if it dies.»

Как оно работает? Всё также: nssm.exe устанавливается в качестве службы с определёнными параметрами, при старте этой службы запускается сам nssm.exe, который в свою очередь запускает java.exe –jar. Вот вам сразу наглядный запуск в диспетчере задач:


Теперь по порядку. Выполняем « nssm.exe install TestServ » для запуска GUI.


(аргументы здесь: -jar “E:\Java\JavaPrograms\test\with Spaces\mainTutorial-1.0-SNAPSHOT.jar” “amazing” “prod”)

Тоже самое можем сделать с помощью командной строки:

AppDirectory установить для нас важно, т.к. используемые нами конфиги и библиотеки лежат именно там, рядом с нашим приложением в поддиректориях resources, res.

Если служба вам надоела, или вы накосячили при её создании, то выполните команду:

Поглядим впритык на записи в реестре:




(да да, мои папки «with Spaces» и «withoutSpaces» не бьются в команде и на скринах, просто считайте, что вы этого не видели, ибо мне лень переделывать)

Все параметры и кавычки в них на месте. Смотрим инфу о службе:


Запускаем службу.. Ура! Всё работает, логи пишутся!

Попробуйте убить джаву или зафейлить своё приложение изнутри.

Вывод: сторонний софт, не написанный нашими великолепными руками, мозгами и ногами, тоже имеет право на жизнь.

Негоже ручками запускать на 30 серверах, нужен скрипт! Опустим раскидывание по тачкам, сделаем хотя бы создание службы, чтобы можно было заменить одно имя переменной, и всё корректно создалось, и запустилась именно та конфигурация для вашего приложения, которая нужна на текущем сервере.

Но скрипт — это же просто! Уверены? А если в имена добавить пробелы? Боль кроется в деталях тонкой настройки кавычек и их экранирования. Допустим, выносим мы AppDir в переменную. Как должны записать её в параметрах и в качестве текущей директории, где кавычки надо, а где нет?

использование в параметрах:

как текущая директория:

При неправильной настройке можно получить такую ошибку при старте службы:

В этой статье, пожалуйста, позвольте мне рассказать о причине и следствии.

Причины:

1. Просмотр журнала производства (огромный: большинство из них составляет один или два ГБ), используйте обычный редактор, чтобы открыть огромный медленный
2. Класс Java-инструмента для рукописного ввода, используйте метод main для сегментирования
3. Если вы считаете, что инструменты не удобны для пользователя, присоединитесь к графическому интерфейсу
4 Наконец, я хочу интегрировать более общий инструмент, просто хочу конвертировать jar в exe-файл

Эта статья говорит только о двух моментах: 1. Экспорт исполняемого файла jar 2. Преобразование исполняемого файла jar в исполняемый

1. Экспортируйте исполняемый файл jar

1.1 Выберите объект для экспорта, щелкните правой кнопкой мыши, чтобы экспортировать
1.2 Выберите тип экспорта в виде файла JAR

1.3 Затем выберите двоичный файл для экспорта и путь экспорта

1.4 Проверьте уровень ошибки экспортируемого файла

1.5 Выберите вход для выполнения файла JAR

1.6 можно завершить, вы можете проверить его, чтобы увидеть, есть ли проблема с экспортом

2. Конвертируйте исполняемый файл в exe

Примечание. Для не упомянутой конфигурации вы можете напрямую использовать конфигурацию по умолчанию! !

2.3 Выберите тип проекта

2.4 Установка информации о приложении

2.5 Установите значок приложения

2.6 Конфигурация информации об исполняемом файле exe

2.7 Выберите пакет jar и основной класс

2.8 Установите операционную среду

2.9 Настройте интерфейс запуска

2.10 можно завершить

резюме

Этот инструмент, который я написал, очень уродлив, но его все еще можно использовать! [Обложка лица]
Несмотря на то, что мало кто использует графический интерфейс с Java, очень полезно понять некоторые принципы и дизайн и понять некоторые шаблоны проектирования. Навыки не раздавить! Узнайте больше и сделайте больше!

Читайте также: