Задать вопрос
@kkolorid

Как конвертировать .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? Вообщем, ни чего не понимаю, люди добрые, спасите.
  • Вопрос задан
  • 1273 просмотра
Подписаться 2 Простой 2 комментария
Решения вопроса 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. надеюсь не зря написал такое эссе и донес свою мысль. Мысль основывается на моих наблюдениях и опыте.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@jkotkot
режим сарказма
Можно взять javafx packager и собрать с его помощью exe, засунув или не засунув jre нужной версии внутрь приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы