2010-02-13 2 views
49

Предположим, я хочу распространять приложение Java.Вставить JRE в исполняемый файл Windows?

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

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

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

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

+1

3 лет на - - глядя на быстрое улучшение, доступное в веб-приложении, я бы сказал, что этот метод распределения устарел. В настоящее время вы можете создать веб-приложение так же хорошо, как настольное приложение, и распространять его легко. Пользователь не должен беспокоиться о загрузке/установке, и любые новые выпуски могут вступить в силу немедленно – gerrytan

+15

@gerrytan Тип широкого предположения, когда вы совершенно не знаете, каковы мои требования! Если бы тот же проект был сделан сегодня, он все равно был бы распространен как обычное приложение. – perp

+8

Обычные приложения через установщик или автономный исполняемый файл никогда не исчезнут. Существует множество причин, по которым развертывание на базе Интернета не является решением одного размера. – SnakeDoc

ответ

21

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

7

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

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

+0

Excelsior JET выглядит интересным. Подойдет ближе. Боюсь, я недостаточно доверяю GCJ, но я мог бы попробовать. Re: VMKit, не для реализации JRE для CLI требуется .NET? – perp

+0

VMKit - это решение .net и JVM в терминах компиляции, для стороны JVM, я думаю, что он объединяется в GNU Classpath; но его в бета-версии на данный момент, поэтому я думаю, что это немного не коммерческое использование. (Единственное, что я нашел ограничение с Excelsior JET, не было поддержкой MacOSX.) – metismo

+0

У нас есть бесплатные лицензии Excelsior JET, доступные для некоммерческого использования, на всякий случай: http://www.excelsior-usa.com/jetfree.html –

4

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

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

Мне очень хотелось бы повторить слишком много, так что проверьте, например. this earlier answer, где я подключил его (как установщик установки, но здесь это не имеет особого значения).

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

+0

Я загрузил пробную версию, но я не могу понять, как заставить ее делать то, что я хочу. Все, что я могу сделать, это создать установщик? – perp

+0

@perp Возможно, вы можете начать, посмотрев «Шаг 3: Настроить пусковые установки» в справочном руководстве: http://resources.ej-technologies.com/install4j/help/doc/indexRedirect.html?http&&&resources.ej-technologies .com/install4j/помощь/док/шаги/запуск/launcher.html. Кроме этого, я не уверен, поскольку лично я только что создал установщиков. Если руководство не помогает, вы можете обратиться за их поддержкой (что, как я знаю, очень хорошо): http://www.ej-technologies.com/support/supportRequest – Jonik

+0

Я только что понял, что компания, стоящая за установкой install4j, также имеет продукт под названием ** exe4j ** специально для создания пусковых установок: http://www.ej-technologies.com/products/exe4j/overview.html. Я не на 100% прямо сейчас, если exe4j может делать то, что install4j не делает - AFAIK оба могут создавать exe-пусковые установки с включенным JRE. – Jonik

0

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

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

+0

Где это говорят? Я просмотрел его, и все, что я вижу, упоминается в том, что он поддерживает «связанную» JRE, что не то же самое. Все, что я мог видеть по этому вопросу, - это то, что упоминается в разделе 3.4.2 в руководстве ... – perp

+0

«Иногда удобнее связывать JRE с вашим приложением. JSmooth также может справиться с этим, вам просто нужно определить, в какой папке ожидается JRE. Он отлично подходит для стандартного поиска JVM, если JRE не там, где он должен быть ». Я читал это как распакованный JRE, а не инсталлятор. –

+1

Да, именно, .exe может искать JRE в указанной папке, но я уже знал, что это возможно с помощью нескольких различных инструментов. Мне интересно, есть ли решение, в котором JRE может быть встроен * внутри самого двоичного файла приложения *, что отличается. Поэтому не «связывать», а «вставлять». :-) – perp

0

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

1

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

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

Если вы работаете в проекте OpenSource, они предоставляют бесплатные лицензии (вам просто нужно связаться с ними). Если это коммерческий проект, тогда требуется лицензия ... но на сумму 69 долларов США за лицензию, это дешево и стоит в то время как imho.

С их сайта:

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. 
10

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

+0

Packr работает, однако он создает структуру папок, содержащую jre/folder, app.exe и ваш оригинальный app.jar. Вам все равно нужно создать установщик, чтобы скопировать эту структуру папок в папку C: \ Programs \. Также ваш .jar все еще существует, он не встроен в .exe. Помимо этого, это хороший инструмент. –

+0

Вы нашли лучший инструмент для создания одного исполняемого файла? – cyberjoac

4

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

+0

Netbeans автоматически создает установщик с использованием необходимых Innosetup и Wix, которые должны быть установлены отдельно. Установщик при запуске создает структуру папок, содержащую среду выполнения, app.exe и приложение/папку с вашим исходным app.jar, расположенным в вашей папке C: \ User \ AppData \ Local, а затем создает соответствующее начальное меню. Обратите внимание, что ваш .jar все еще существует, он не встроен в .exe –

0

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

Если вы получите мягкие miminizejre по packr, чем скопировать MyApp.jar приложения в пусковую \ JRE \ Bin \

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

Открыть входной сигнал энциклопедия Engimedia -> javaw.exe из запуска \ jre \ bin \

И идут варианты, если вы хотите высокий компресс и Найти Разное -> Командная строка «-jar MyApp.jar»

и нажмите кнопку защиты и ждать целых библиотек DLL и баночки в ехе

Убедитесь, что MyApp.jar должен генерировать Eclipse с помощью «Пакет необходимых библиотек в сгенерированный JAR», потому что вы не беспокоитесь, если вы импортировали много примеров библиотек lwjgl или JavaFX, чем вы должны проверить, включил ли встроенный javaw_protected.exe важные атрибуты примеров файлов.

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

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

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

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

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

// EDIT:

ОБНОВЛЕНО НОВАЯ ВЕРСИЯ EXCELSIOR JET + ВИРТУАЛЬНЫЙ BOX OR PROTECTOR почти лучшие "встроенные приложения"

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