Встроить JRE в исполняемый файл Windows?

предположим, я хочу распространять приложение Java.

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

теперь предположим, что я хочу распространить его как an .exe-файл в Windows. Это достаточно просто, учитывая хорошие инструменты (такие как Launch4j и подобные).

но предположим теперь, что я не хочу зависеть от конечный пользователь, имеющий право JRE (или любой JRE вообще, если на то пошло) установлен. Я хочу распространять JRE с моим приложением, и мое приложение должно работать на этом JRE. Достаточно просто создать исполняемый файл установщика Windows и встроить в него папку со всеми необходимыми файлами JRE. Но тогда я распространяю установки и не один-файл приложения.

есть ли способ встроить оба приложения,и JRE, в an .exe-файл, выступающий в качестве запуска приложения (и не как установщик)?

11 ответов


попробуйте использовать птиц и должны быть справочники. Avian позволяет встроить в приложение легкую виртуальную машину. Поддерживаются Linux, MacOS, Windows и iOS. И ProGuard позволяет сжать большой файл jar для подготовки к встраиванию.


есть новый инструмент, который делает это: Packr
https://github.com/libgdx/packr


довольно много вариантов вокруг, коммерчески это очень хорошо:

http://www.excelsior-usa.com/jet.html

есть два ключевых варианта с открытым исходным кодом GCJ и VMKit

http://gcc.gnu.org/java/ и http://vmkit.llvm.org/

другие более продолжительные пути включают IKVM.NET:

http://www.ikvm.net/

который является .NET JVM, который может быть статически скомпилирован в EXE


есть ли способ встроить как приложение, так и JRE в an .exe-файл, действующий как программа запуска приложений (а не как установщик)?

если коммерческий инструмент подходит для вас,install4j решает эту проблему очень плавно (см. "свойства" страницы). Он может генерировать и пусковые установки и установщики приложений.

Я бы не хотел повторяться слишком много, поэтому проверьте, например,это раньше ответ где я подключил его (как installer builder, но здесь это не имеет большого значения).

сводка / нижняя строка: install4j может создавать собственные .exe пусковые установки, которые абсолютно делают не зависите от предустановленного JRE (или любых других конкретных библиотек), и он предлагает гибкие возможности для связывания (и обнаружения) JREs.


Netbeans позволяет проекту Java SE быть упакованным в собственный установщик приложений, встраивая JRE. Это здесь:https://netbeans.org/kb/docs/java/native_pkg.html :)



Я знаю, что немного опоздал на эту вечеринку, однако похоже, что ej-technologies (любят свои вещи) имеет новое решение под названием exe4j который будет делать именно так, как OP хотел без каких-либо смешных дел.

http://www.ej-technologies.com/products/exe4j/overview.html

Если вы работаете в проекте с открытым исходным кодом, они обеспечивают свободные лицензии (вам просто нужно связаться с ними). Если это коммерческий проект, то требуется лицензия... но на $69 USD за лицензию, это чертовски дешево и стоит имхо.

С их сайта:

If you want your own process name instead of java.exe in the task manager
and a user friendly task-bar grouping, exe4j does the job for you.

exe4j helps you with starting your Java applications in a safe way, displaying
native splash screens, detecting or distributing suitable JREs and JDKs,
startup error handling and much more.

JSmooth может сделать это в соответствии с документацией. Я только попробовал его без встроенного JRE, но был очень доволен. Это сценарий с ant, и мы строим на Linux.

http://jsmooth.sourceforge.net/features.php


вы можете взглянуть на: http://ulibgcj.sourceforge.net/uswt.html Он имеет библиотеку micro-swt, которая упрощает создание GUI с помощью SWT и посмотрите на Eclipse GCJ Builder


Install4j-отличный инструмент для этого изгиба цели.Также вы можете проверить JSmooth или launch4j-все, хотя я попытался связать jres с JSmooth и не смог..


Я нашел Engima проектор x86 / x64 лучше, чем BoxedApp Packer

Если вы получаете мягкий miminizejre по packr, чем скопировать приложение myapp.jar в launcher\jre\bin\

и скопируйте из установленного примера jre C:\Program Files\Files\Java\1.8.0_xxx\bin\javaw.exe для запуска \ jre\bin\

открыть вход Engima Protector - > javaw.exe из launcher\jre\bin\

и идут варианты если вы хотите высокое обжатие и Найти разное - > Командная строка " - jar приложение myapp.jar"

и нажмите "защитить" и дождитесь целых DLL и jar в exe

убедитесь, что ваш myapp.jar должен генерировать Eclipse с "необходимыми библиотеками пакета в сгенерированный JAR", потому что вы не волнуетесь, если вы импортировали много библиотек, например lwjgl или JavaFX, чем вы должны проверить, встроен ли javaw_protected.exe включил важные файлы пример активов.

но BoxedApp Packer тоже BoxedApp Packer немного больше, чем Engima Protector. Protector-это почти лучшее небольшое вложение javaw.exe с активами / ресурсами. Чем они не могут взломать файлы jar... Я надеюсь, что вы довольны собственной jar в exe как менее 4 мб без каталога lib - если у вас есть проблемы с jvm.сообщение об ошибке cfg означает, что вы не копируете встроенный exe в корневой каталог jre или JDK

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

Я надеюсь, что у вас нет проблем, если вы используете Protector x86, чем нужно использовать i586, Протектор 64-разрядных JRE для 64-разрядных

Если вы используете Protector x64 с JRE x86 / i386 - это нормально без проблем. Работает отлично.

с наилучшими пожеланиями

/ / EDIT:

обновленная новая версия EXCELSIOR JET + VIRTUAL BOX или PROTECTOR-почти лучшие "встроенные приложения"

Проверьте youtube:https://www.youtube.com/watch?v=ctbIxq-1MGE