Комбинация Launch4J и Java Web Start?

У меня есть работающее приложение JNLP, которое мне нужно распространить среди различных нетехнических конечных пользователей.

Если на компьютере пользователя установлена ​​последняя JVM, все в порядке. Они просто дважды щелкают файл JNLP, который я им отправляю, а Java Web Start делает все остальное.

Теперь я хотел бы распространять что-то, что работает с JVM или без нее, например. файл .exe, который автоматически загружает совместимую JVM, если ее нет, а затем вызывает javaws.exe для загрузки файлов .jar и запуска приложения.

Launch4J - самое близкое совпадение, которое я нашел, но оно не может запустить программу через javaws.exe. Единственные варианты: java и javaw

Я хотел бы продукт, который может:

  • Создайте автономный файл .exe, который не требует предварительной установки JVM.
  • Проанализируйте файл .jnlp и определите правильную JVM для загрузки, если это необходимо (я знаю, что Java Web Start может загрузить JVM, если это необходимо, но я хочу избежать загрузки двух, первый для начальной загрузки Java Web Start и второй для запуска приложения для которого может потребоваться конкретная, но другая JVM.)
  • Загрузите и установите JVM автоматически, не просто перенаправляя пользователя на страницу загрузки Java или открывая новый мастер установки.
  • При необходимости запросите пароль администратора (для разрешений на установку JVM. Я не думаю, что это встроено в установщики Sun JVM).
  • Показать только одно диалоговое окно безопасности (я хотел бы предложить пользователю только один раз, чтобы подтвердить, что он доверяет сгенерированному .exe, но я не хочу, чтобы второй запрос подтверждал, что он доверяет файлу .jar, который будет из того же источника и подписан с помощью тот же сертификат.) Я предполагаю, что для этого потребуется, чтобы автоматический загрузчик установил сертификат перед запуском JWS.)
  • (необязательно) Загрузите ресурсы приложения (например, .jar файлов) в фоновом режиме одновременно с JVM. Это потребует запуска кеша до установки JVM, поэтому кеш должен быть реализован в собственном коде, а DownloadService позже будет взаимодействовать с ним с помощью JNI.

Существует ли такой продукт? Подозреваю, что нет, но попробовать стоит.


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


person finnw    schedule 31.07.2010    source источник


Ответы (6)


Я столкнулся с той же проблемой. Я закончил с BAT, Shell и, в конечном итоге, с DMG для Mac.

Я нашел этот комментарий об автоматической установке JRE для Windows с помощью установщика Nullsoft:

http://nsis.sourceforge.net/Java_Launcher_with_automatic_JRE_installation

Я думаю, что за пределами JNLP вам будет сложно автоматизировать все платформы. Однако в моем проекте в течение двух лет я не видел жалоб на то, что пользователям приходится самостоятельно получать Java. Я считаю, что большинство машин уже будут иметь его. Пользователь Windows жаловался, что у него нет ярлыка, но это легко сделать с помощью vbs.

Также в Mac DMG AppBundle можно указать JRE. Mac будет иметь самую последнюю версию, если только это не более старые машины на базе PowerPC. В этом случае нет Java6.

Если у вас есть несколько пусковых установок, я бы порекомендовал стратегию автоматического обновления.

person Thomas    schedule 11.08.2010
comment
Я не так беспокоюсь о платформах, отличных от Windows. На Mac всегда установлена ​​JVM, и я предполагаю, что у большинства пользователей Linux есть технические знания, чтобы найти и дважды щелкнуть файл .jar, если это необходимо. - person finnw; 11.08.2010

Я смог сделать это и использовать его в производстве.

напишите простой класс начальной загрузки, создайте его jar и Launch4j jar.

здесь main для простого класса начальной загрузки:

public static void main(String[] args) {
  try {     
    final File jnlp = File.createTempFile("temp", ".jnlp");
    final URL url = new URL("http://yourjnlp-wherever-youre-hostingit.jnlp");
    yourCopyStreamMethodYouWrote(url.openStream(),new FileOutputStream(jnlp));
    Desktop.getDesktop().open(jnlp);
  } catch (final Throwable t) { 
     // do something useful here
  }
}
person niceguy    schedule 04.01.2012
comment
Это звучит как правильный способ сделать это. launch4j обеспечивает наличие JVM (я не знаю, может ли она устанавливаться автоматически или нести ее с собой) и вызывает код. Затем код просто говорит браузеру запустить сценарий JNLP. - person Thorbjørn Ravn Andersen; 14.01.2013
comment
Это умно, но разве вы не получаете два ворчащих экрана (вопли безопасности, вы хотите запустить) как для этого класса, так и для вашего приложения Java Web Start? - person Joel; 25.05.2016

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

person ddimitrov    schedule 11.08.2010

Другим подходом может быть также распространение Sun JRE с .BAT-файлом, вызывающим его с ключом /S, что вызывает автоматическую установку.

Я не видел ничего другого, позволяющего полностью автоматическую установку Java в сочетании с вызовом javaws.

person Thorbjørn Ravn Andersen    schedule 31.07.2010

Хорошо, я понимаю, что вы пытаетесь сделать, но почему вы не хотите использовать javaws? Launch4J выглядит как хороший вариант в качестве альтернативы установке java, поскольку он позволяет беспрепятственно использовать файл jar.

javaws более или менее использует java.exe с разрешениями безопасности и некоторыми параметрами запуска. Но разрешения безопасности можно отключить, если вы используете сертификат, которому доверяет пользователь.

Также я не уверен, когда был представлен javaws, но я уверен, что он был доступен в java 1.5, который я близко к EOL. Поэтому, если у вашего пользователя не была установлена ​​​​java в течение многих лет, я сомневаюсь, что заставить их запустить jnlp будет проблемой. Даже если они используют более старую версию, вы можете добавить требуемую версию java в jnlp, и она будет автоматически загружена только для этого приложения.

person kohlerfc    schedule 11.08.2010
comment
Я действительно хочу использовать javaws. Проблемным случаем является ПК, на котором никогда не устанавливалась Java. - person finnw; 11.08.2010

Хотя он и не является бесплатным для некоммерческого использования, Install4j предлагает встроенную систему установки. для Java-приложений. Поддерживается объединение JRE. Я не уверен, что он может автоматически анализировать JNLP, но, возможно, это стоит проверить.

В качестве примера использования распространяется основанный на Java интегрированный браузер генома с установщиком, созданным этим инструмент. См. его install4j файл конфигурации.

person driu    schedule 12.11.2015