Java в EXE хорошая или плохая идея? - PullRequest
6 голосов
/ 09 января 2012

Я долго размышлял о преобразовании Java проектов в EXE.

Преимущества заключаются в более быстром развертывании в Windows , когда пользователь просто дважды щелкает EXE, и приложение запускается там, где Java , он должензапустить определенные команды.

Но EXE на самом деле не то, для чего Java был предназначен для переносимости.

Так что вы думаете, Java для EXE хорошая или плохая идея?

Я нашел здесь интересную статью .

Обновление

Ничего себе, поэтому до сих пор возможны противоречивые мнения.Я хотел бы, чтобы вы добавили плюсы и минусы JAVA в EXE.

Ответы [ 9 ]

4 голосов
/ 09 января 2012

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


Другие люди прокомментировали специфический характер ОС для EXE. Мне всегда приходится задумываться, почему люди выбирают Java для разработки приложений для Windows, специфичных для Windows. Поскольку программное обеспечение Visual Studio для Windows, вероятно, будет заниматься как разработкой графического интерфейса пользователя (без макетов Java-приложений x-plat, чтобы сойти с ума), так и развертыванием (просто догадываясь, что это может сделать EXE) проще.

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


Что касается потенциальных недостатков создания EXE, я отмечу на JavaFAQ на EXE .

Существует ряд веских причин не упаковывать ваше приложение в исполняемый файл. Даниэль Сьёблом отмечает:

  • Вероятно, не будет быстрее. Современные виртуальные машины не интерпретируют байт-коды, они фактически используют JIT-компилятор для создания собственного скомпилированного кода. Посетите сайт Sun для получения дополнительной информации о JIT-компиляторах.
  • Статическая компиляция увеличивает размер вашего приложения в несколько раз, поскольку все библиотеки, которые вы используете, должны быть связаны с приложением.
  • Вы теряете «бесплатные» обновления вашей программы. Каждый раз, когда ваш пользователь загружает новую более быструю виртуальную машину, ваше приложение получает ускорение. Если вы используете exe, вы не получите это преимущество.

Джон А. Круз подробно описывает некоторые дополнительные шаги в процессе разработки, необходимые для создания исполняемого файла. Он указывает, что разработчики, делающие нативные exe-файлы, должны:

  • Проверка последних версий продукта компиляции от поставщика. Если обнаружены критические ошибки, их нельзя использовать для создания продукта доставки, пока они не будут устранены. Работа, которую необходимо выполнять каждый раз, когда от поставщика выходит ревизия.
  • Отправьте программное обеспечение через цикл QA. Как только инженерия думает, что все сделано, они должны быть проверены. Таким образом, каждая отгрузочная версия и обновление продукта должны проходить полный цикл тестирования.
  • Кроме того, поскольку собственная компиляция выполняется для целевой платформы, цикл QA необходимо выполнить полностью для каждой целевой платформы, что умножает необходимые усилия.
  • Стеллаж. Может быть, в настоящее время не имеет большого значения, но может быть.
  • Тогда нужно, чтобы все клиенты обновились до нужной версии. Либо иметь бесплатные обновления (в этом случае бизнес должен покрывать расходы на производство обновлений), либо, в качестве альтернативы, необходимо обрабатывать клиенты, не все обновления.

Джон отмечает далее: когда вы отправляете стандартные Java-байт-коды, проблемы с ВМ являются ответственностью платформы или поставщика ВМ. Однако, когда вы отправляете скомпилированные двоичные файлы, они становятся вашей ответственностью (даже если они действительно являются ошибками в продукте компиляции поставщика).

...


Конечно, мой первый выбор для развертывания приложений Java-клиента. использует Java Web Start . Положим некоторые преимущества / возможности веб-старта в виде точек:

JWS предоставляет множество привлекательных функций, включая, но не ограничиваясь:

  • заставки
  • интеграция с рабочим столом
  • ассоциации файлов
  • автоматическое обновление (включая отложенные загрузки и программный контроль обновлений)
  • разбиение нативных и других ресурсов для загрузки по платформе, архитектуре или версии Java,
  • конфигурация среды выполнения (минимальная версия J2SE, параметры времени выполнения, ОЗУ и т. Д.)
  • простое управление общими ресурсами с помощью расширений ..

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

И, конечно же, JWS работает в ОС для настольных ПК, для которых доступна Java.


Обновление

.. требуется ли интернет-приложениям Java подключение к Интернету?

(Обратите внимание, что имя «Java Web Start».)

Конечно, это так.По крайней мере, для первоначальной установки.Можно указать проверки обновлений, чтобы продолжить запуск ранее установленной версии приложения.если пользователь в данный момент не подключен.

Но тогда (по моей оценке) больше машин (например, нетбуков) без привода CD / DVD, чем без подключений к Интернету. Если вы хотите продавать на более крупном рынке, обратитесь в сеть, чтобы доставить приложение.

3 голосов
/ 10 января 2012

Я автор статьи, на которую вы ссылались - рад, что вы нашли ее интересной!

Как говорится в моей статье, и, как другие уже указывали в своих ответах, существует несколько способов упростить развертывание приложений Java - JNLP, обертки EXE, установщики, связывающие частную JRE, и так далее. Но настоящая нативная компиляция - единственная опция, которая также обеспечивает защиту от декомпиляторов Java - вы просто не отправляете байт-коды.

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

Что касается производительности приложений, нативная компиляция может иметь большое значение, если вы ориентируетесь на встроенные системы. Это также относится к памяти и дисковому пространству, хотя и в меньшей степени. На рабочем столе вы обычно получаете лучший запуск, но в большинстве других сценариев и аспектов результаты будут зависеть от вашего приложения.

3 голосов
/ 09 января 2012

Это зависит от ваших потребностей. Мы написали небольшое клиентское приложение для сканирования штрих-кодов для наших клиентов. Они запускают его на двух Windows-ПК. Они счастливы, имея свои хорошо известные exe-файлы. Мы кодировали его на Java и создали для них EXE-файл.

Обе стороны довольны этим - так почему бы не сделать это?

Если для этого есть веские причины и ничего против этого, кроме догматизма, то, на мой взгляд, все в порядке.

2 голосов
/ 09 января 2012

Если у него есть веская причина, почему бы и нет? Даже в Eclipse есть EXE-файл для Windows и (и зависящие от платформы двоичные файлы для Linux, Mac и т. Д.) Конечно, вы теряете переносимость, но если это не важно, продолжайте.

UPDATE

Вопрос в том, чего вы хотите добиться, создав exe-файл:

  • Удобство: пользователи окон предпочитают нажимать на значки, это особенно актуально для не фанатов. С другой стороны, не фанатам безразлично, что делает ссылка внутри, если она запускает exe или что-то еще. Вы также можете иметь значок приложения не для нативных приложений Java. Альтернативы будут

    • Веб-старт
    • Создание пакета установки, например: http://www.advancedinstaller.com/java.html Это также может решить проблему установки JRE
  • Производительность: если вы компилируете свое Java-приложение в собственное решение, вы можете немного выиграть в производительности, но это зависит от того, какую технологию вы используете. Например, Swing имеет тенденцию быть медленным, но компилировать его в native довольно сложно. Если вы используете SWT вместо Swing, который уже использует нативные компоненты, то нет необходимости в дальнейшей нативной компиляции. С другой стороны, последние JVM работают очень хорошо и могут компилировать Java в native для дальнейшего устранения узких мест производительности. Это делается в фоновом режиме, вам не нужно беспокоиться об этом.

Сумма: в некоторых случаях это может быть единственным решением, но если вы выберете правильные технологии, будет много альтернативных решений на основе Java для достижения той же цели.

1 голос
/ 09 января 2012

Страница за ссылкой в ​​вопросе написана компанией, которая продает продукты, которые компилируют Java в нативный код.Я бы не стал основывать решение только на этом.

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

Это возможно с исполняемым файлом JAR.На самом деле, это довольно просто с помощью стандартных инструментов во время выполнения Java.Вам просто нужно добавить манифест в jar-файл и указать класс с основным в нем.Вы также можете указать другие jar-файлы в classpath относительно расположения основного jar-файла.Вы также можете указать изображение для использования в качестве заставки в качестве ресурса.

например,

Class-Path: lib/derby.jar lib/derbytools.jar lib/jcalendar-1.3.2.jar l
ib/joda-time-1.4.jar lib/log4j-1.2.14.jar lib/looks-2.2.1.jar lib/swi
ng-layout-1.0.jar
SplashScreen-Image: resources/splash.png
Main-Class: com.you.pkg.app.Main

Базовый проект Ant в Netbeans будет делать все, кроме экрана-заставки, если выиспользуй это.Если по какой-то причине вы хотите сделать все это вручную, убедитесь, что вы понимаете формат файла манифеста, он немного привередливый.

0 голосов
/ 09 января 2012

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

Если ваши пользователи менее изобретательны, но вам все равно это нужнозапустить на нескольких платформах, затем обернуть его как exe для Windows и как .app для Mac.

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

0 голосов
/ 09 января 2012

Minecraft делает это, так что, должно быть, это хорошая идея! Если оставить в стороне все шутки, поймите, что вы ищете не «конверсию», а использование собственного модуля запуска. Статья, на которую вы ссылаетесь, хорошо объясняет различные подходы и плюсы / минусы каждого из них. Как общая идея, это требует дополнительной работы по созданию модуля запуска (и другой версии для каждой отдельной архитектуры ОС), но дает вам немного больше контроля (проверка версий - хорошая функция, также вы можете обновить jar приложения легко, как это делает Minecraft). В целом, это хорошая идея, если вы думаете, что это стоит усилий и (небольшой) потери в мобильности.

Редактировать: подход «Пользовательские средства запуска Java и оболочки» - тот, который вам следует использовать, если вам не нужны действительно изящные дополнительные функции, предлагаемые теми, кто ниже.

0 голосов
/ 09 января 2012

Jar-файлы предоставляют множество преимуществ, в том числе: Компактное: все приложение (т. Е. Все файлы классов) хранится в одном архивном файле (который может включать изображения и звуковые файлы при необходимости).Удобство использования: приложение можно запустить двойным щелчком мыши.Сжатие: формат JAR позволяет сжимать ваши файлы для эффективного хранения.Безопасность: вы можете поставить цифровую подпись на содержимое файла JAR.Пользователи, которые распознают вашу подпись, могут при желании предоставить вашим программным привилегиям безопасности, которых у них не было бы иначе.

Я бы не стал конвертировать в exe.

Большинство приложений Windows запускаются из файла .exe (Word, Internet Explorer, FireFox, NetBeans, ...). Сама Java не поддерживает этого.поскольку исполняемый файл будет зависеть от платформы (т. е. он не будет работать на Mac). Однако есть (бесплатные) приложения, которые могут сделать это за вас.

0 голосов
/ 09 января 2012

Как Linux, mac., Пользователь Solaris, я думаю, что это плохая идея.Если вы хотите быстрее развернуть Windows, просто создайте установщик.

...