Как jar переделать в exe
Перейти к содержимому

Как jar переделать в exe

  • автор:

Сборка приложения из JAR в EXE с JRE

Просто при запуске программы, написанной на Java, на машине, на которой она не установлена — программа, соответственно, работать не будет. Как решаются подобные вопросы?

Отслеживать
задан 12 апр 2015 в 9:03
danilatorsu danilatorsu
135 1 1 золотой знак 1 1 серебряный знак 9 9 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Самые популярное решение Launch4j или exe4j , но это всего лишь Загрузчик приложения на java, то есть jre все равно необходимо.

Отслеживать
ответ дан 12 апр 2015 в 15:53
1,865 1 1 золотой знак 17 17 серебряных знаков 25 25 бронзовых знаков

Можете приобрести Excelsior Jet. А можете собрать приложение с помощью gcj. Но размер вас не порадует. Можно собрать с JVM «в пузе», например с JamaicaVM.

Отслеживать
ответ дан 12 апр 2015 в 15:36
111 1 1 бронзовый знак
Кстати, сейчас можно купить Excelsior JET всего за $50: excelsiorjet.com/charity
13 апр 2015 в 12:30

Установите JRE. иначе никак. преобразование в .exe не спасёт. Ну если очень хочется преобразовать jar -> exe то вот ссылка, но jre — обязательный компонент

Отслеживать
ответ дан 12 апр 2015 в 9:27
3,405 2 2 золотых знака 21 21 серебряный знак 42 42 бронзовых знака
То есть приложения, написанные на java без jre вообще нельзя использовать?
26 июн 2019 в 19:26

    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Из Jar в Exe

Посоветуйте, пожалуйста, как перекомпилировать/переделать jar файл в exe, чтобы этот файл мог быть запущен на win без jvm и jre. То есть обычный exeшник
Пытался сделать это в программе launch4j, но для запуска exeшника требуется jre.

Знаю, что это по-сути бессмысленно, можно ведь поставить jav’у на машину и запускать jar, но преподавателю нужен единственный exe файл.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Jar в exe (плюс встроенная jre)
Добрый день! Какими средствами можно сделать exe из jar-файла, но чтобы пользователю не нужно было.

Генерация EXE файлов из классов (или jar-а) JAVA
Необходимо сгенерировать EXE-файл из классов (или jar-а) JAVA. Видел много прог, которые создают.

Когда конвертирую файл jar в exe в программе launch4j он на выходе выдает файл xml
Когда конвертирую файл jar в exe в прогe launch4j он на выходе выдает файл xml что делать?

Jar внутри jar
Можно ли сохранить jar внутри другого jar и использовать его? Нужно опять же для драйвера базы.

Как конвертировать .jar в .exe на JDK 11?

Здравствуйте. Не могу понять, как скомпилировать exe`шник из .jar на JDK 11. С горем по-полам получилось сделать всё-таки рабочий .jar, который захотел запускаться только после того, как я в PATH прописал ещё и /bin/ jar`a с JAVAFX11, который подключался к проекту при разработке (javafx почему-то не поддерживается в JDK 11, пришлось сделать кучу костылей каких-то). Кстати, этот jar на др компах запускается только если поставить эту же JDK11 и так же прописать javafx отдельно. Самая новая версия обычной пользовательской jre se с сайта джавы почему-то говорит, что программа написана на более новой версии java (Это как вообще? Зачем делать JDK 11 и 12, если на сайте 8ая вообще, какая-то?). В итоге сейчас не могу сделать из этого всего exe, потому что все бесплатные и условно бесплатные проги (Lounch4j, JSmooth, Jet) тупо не хотят работать с такими версиями java. Просит 1.6 — 1.8.9. Опять же, как это понимать, вообще?

Вообщем, вопрос скорее о том, что я не понимаю всей этой мишуры с версиями и сборками. Зачем вообще что-то писать на старых версиях и так хардово их поддерживать? Как пользоваться javafx так, что бы мне не приходилось постоянно что-то костылить при сборках? Почему проект, сделанный на JDK 11 запускается только с него же? Пользовательского jre на сайте этой версии что-то я не нашёл. Какой вообще смысл в десктоп разработке, если у тебя на выходе даже exe`шник сделать не получается без кучи каких-то костылей со стороны? Моему готовому проекту уже ни как не попасть в продакшн? — Зачем его вообще писать тогда, если он запускается только из твоей IDE? Вообщем, ни чего не понимаю, люди добрые, спасите.

  • Вопрос задан более трёх лет назад
  • 1137 просмотров

2 комментария

Простой 2 комментария

Сергей Горностаев @sergey-gornostaev Куратор тега Java
Стоило сначала изучить платформу, а потом писать для неё приложение.

sergueik

kkolorid зафиксируйте что ваш проект требует 8 и снесите 11 — javafx гораздо стабильнее на восьмой
Решения вопроса 1

jamakasi666

Дмитрий Александров @jamakasi666 Куратор тега Java
Просто IT’шник.

Ну начнем по порядку.
Java как язык и среда крайне консервативная и любые нововведения как правило воспринимаются в штыки. Плохо это или хорошо вопрос крайне тонкий и в глазах потребителя всегда разный. Со стороны энтерпрайза это просто восхитительно, есть огромный выбор в хороших специалистах, есть огромное время поддержки нужной версии которая обкатана годами и уже почти все известно о всех тонкостях. Со стороны мелких инноваторов и разработчиков развитие идет непостижимо медленно а значит есть отставание от трендов и оно значительное.
Предрекая вопрос что за бред привожу следующий факт по поддержке версий:
J2SE 1.4 выход 2002 год, конец поддержки 2013
J2SE 5.0 выход 2005 год, конец поддержки 2015
J2SE 6 выход 2006 год, конец поддержки 2018
J2SE 7 выход 2011 год, конец поддержки 2022
J2SE 8 выход 2014 год, конец поддержки 2025
J2SE 9-10 вышли в 2017/18 годах, проходные бэты и ключевой момент развития и политики java в котором произошло множество огромных изменений политики. Особенно изменилась лицензия по моему именно где то тут и очень сильно, рекомендую почитать холивары на эту тему.
J2SE 11 вышла в 2018, конец поддержки 2026 год.
Если вдаваться в абстракцию могу предложить следующую иллюстрацию. (еще раз это просто иллюстрация для понимания и попыток провести параллель с чем то иным).
Предположим что майкрософт идет тем же трендом что и оракл как и весь мир большого бизнеса. На выходе имеем следующее:
-основная ОС на которую ориентируются большие игроки рынка софта и игр является winXP.
-миром до сих пор правят однопоточные но многогерцовые процессоры которые правда уперлись в 5Ггц. Зачем менять то что и так прекрасно в простоте. Просто удешевляем и «ухолодняем» производство. Да и вообще у основной массы все еще камни уровня 1 поток и 3.4 ГГц. Ориентируемся на это.
-миром видеокарт до сих пор правят dx9c без новомодных нововведений, без cuda\opencl, без dxr, без подходом низкоуровнего апи вида вулкана\dx12. Зачем менять то что итак прекрасно работает и давно известно с каждой стороны. Видеокарты выходят давно упер в возможности выходя из ревизии к ревизии с фиксами багов и удешевлением производства. Да и в общем то зачем что то новое, т.к. у основной массы еще графика уровня встройки.
— всякие nvme\m2\pcie4 все от лукавого, зачем это если у массового пользователя все еще sata2 hdd который едва ли выдает что то среднее.
-мониторы у всех в среднем 800х600 пикслей, а зачем больше то?
+ На выходе с этими ориентировками имеем универсальный продукт(софт\игру) которая будет работать вообще у всех в среднем отлично, все возможные баги были известны и пофикшены еще 10 лет назад. Новомодное все от лукавого и только у единиц энтузиастов, а значит не берем их в расчет или берем пытаясь выдать это как фичу.

Теперь немного пояснений к вышесказанному, разработчики, большие естественно, получают колоссальное преимущество т.к. их много, есть выбор, они знают и понимают что и как происходит, у них есть богатый стаж как делать можно и как нельзя, а главное почему. Изучение языка и стандарта версии крайне подробное, тонны книг, курсов, обсуждений. С другой стороны никаких новшеств нет, все как на уровне 10 лет назад так и осталось, хочешь круглую кнопочку так забудь или только медленными костылями за которые сразу объявят костылеписателем рукожопом.

Надеюсь параллель понятна. Теперь к вопросу.
Сейчас, я напомню 2019 год, скажу честно видел не один десяток энтерпрайз решений которые до сих пор все еще развиваются на jre7. Есть те кто скрипя зубами переходит на jre8, но пока, опять же лично мои наблюдения, это вот прям скрипя зубами о асфальт, очень нехотя, очень не хочется.

Касательно компиляции в ехе, нет такого понятия в мире java. Опять же дам пояснения.
Java это про изоляцию хостового железа от софта. Т.е. у Вас есть софт которому глубоко фиолетово сколько там ядер, какая ФС, какая ОС и т.д. .JRE это «виртуальная машина» и в этом ее прелесть, «есть один бинарник который работает везде и которому пофиг где он был запущен» главное чтобы была JRE.
И вот тут возникает прикол, самих реализаций JRE множество, есть платные, есть бесплатные, есть условно платные, у каждой своя лицензия и ограничения Каждая решает свои проблемы.

Так вот, предложу очередную аналогию. Предположим Вы создали автомобиль который ездит на «топливе», все замечатально, в вашем определении топливо «все что горит». На практике же на бензине он как бы работает и так как ожидалось. На дизельном как то вообще не очень. На авиационном, ну работает правда не долго. На водородном вот даже не заводится.

Ну ладно хватит вокруг да около, а то развел демагогию. Лично мое мнение и практика, JAVA приложения вообще нельзя, еще раз НЕЛЬЗЯ собирать в ехе или любую другую самодостаточную сборку.
Банально но потому что Вы врезаете пользователя или СЕБЯ в лицензию или ограничения. Ну например вы собрали ехе который по сути включает jre под win10 и скинули мне, а у меня winXP и нифига не работает, а если работает то с совершенно непонятными логами багов. Вот скинули бы jar файл с пометкой что собран под jre7 то проблем бы не было от слова совсем.

А, и к слову, даже встроенный механизм java по сборке так называемых native сборок не решает проблем разношерстности от слова совсем.

PS. надеюсь не зря написал такое эссе и донес свою мысль. Мысль основывается на моих наблюдениях и опыте.

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

Java-университет

Кратчайшая инструкция. Пишем простейшее тестовое приложение, допустим «Hi Amigo!» в файл HiAmigo.txt 100 раз.

 public class Main < public static void main(String[] args) throws IOException < File file = new File("C:\\temp\\HiAmigo.txt"); FileWriter fileWriter = new FileWriter(file); for (int i = 0; i < 100 ; i++) < fileWriter.write("Hi Amigo! \n"); >fileWriter.close(); > > 

Проверяем что все работает на этом этапе (это важно!) Конвертируем JAR в исполняемый (.exe) файл - 1Идем File -> Project Structure -> Artifacts -> + JAR -> From Modules with dependencies.. Конвертируем JAR в исполняемый (.exe) файл - 2Указываем путь к нашему Main.class: Конвертируем JAR в исполняемый (.exe) файл - 3Жмем ОК Жмем Build Artifacts — > Action -> Build Конвертируем JAR в исполняемый (.exe) файл - 4Появляется наш артефакт: Конвертируем JAR в исполняемый (.exe) файл - 5Удаляем наш тестовый файл «C:\\temp\\HiAmigo.txt» и запускаем JAR. Файл должен появиться еще раз. Если появился — все ок. Едем дальше. Качаем тулзу с сайта https://launch4j.sourceforge.net/ (Рекомендую версию 3.14, потом объясню почему). Устанавниваем запускаем. Нам нужно два поля. Указываем наш JAR и куда класть готовый .exe Конвертируем JAR в исполняемый (.exe) файл - 6Сейчас самое интересное. Представьте ситуацию что на машине где мы планируем использовать наше приложение не установлена JRE и нет возможности ее установить. Такое часто бывает по соображениям безопасности. К тому же хорошо бы обеспечить наше приложение более высоким уровнем автономности. Делаем следующее. Создаем отдельный каталог для нашего приложения, пусть OurApp. Внутри создаем папку JRE. Качаем JRE (в моем примере пусть будет jre-8u361-windows-i586) устанавливаем куда нибудь (если это готовый архив разархивируем) и выдергиваем из нее все файлы. Копируем все в \OurApp\JRE\ должно получиться примерно так: Конвертируем JAR в исполняемый (.exe) файл - 7В Launch4j переходим во вкладку JRE и в поле Bundled JRE paths: указываем имя каталога JRE Конвертируем JAR в исполняемый (.exe) файл - 8Жмем на шестеренку и выбираем любой файл для сохранения конфигурации типа file.xml Конвертируем JAR в исполняемый (.exe) файл - 9После нажатия на save появится наш exe. Конвертируем JAR в исполняемый (.exe) файл - 10Копируем exe и кладем рядом рядом с папкой JRE Конвертируем JAR в исполняемый (.exe) файл - 11Удаляем тестовый C:\temp\HiAmigo.txt. Запускаем exe и смотрим как создается новый. Вот и все. Теперь каталог можно OurApp можно архивировать и передавать куда угодно, exe отработает. Важно: Версия JRE в папке должна быть не ниже той на которой билдился артефакт. Проверяйте поле: Конвертируем JAR в исполняемый (.exe) файл - 12В моем случае возникли проблемы совместимости с x86 платформой и я использовал версию враппера 3.14, так как в ней можно явно указывать тип целевой архитектуры. В общем всем спасибо за внимание. Это была моя первая статья-инструкция, прошу не судить строго. Всем мир!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *