У меня есть работа приложение JNLP, которое я должен распределить различным нетехническим конечным пользователям.
Если машине пользователя установили недавнюю JVM, все прекрасно. Они просто дважды щелкают по файлу JNLP, который я отправляю им, и сеть Java Запускаются, делает остальных.
Теперь я хотел бы распределить что-то, что работает с или без JVM, например, a .exe
файл, который автоматически загружает совместимую JVM, если ни один не присутствует, затем вызывает javaws.exe
загружать .jar файлы и запускать приложение.
Launch4J является самым близким соответствием, которое я нашел, но это не может запустить программу через javaws.exe
. Единственные опции java
и javaw
Я хотел бы продукт, который может:
.exe
файл, который не требует, чтобы JVM была предварительно установлена.jnlp
файл и определяет корректную JVM для загрузки при необходимости (я знаю, что веб-Запуск Java может загрузить JVM при необходимости, но я хочу избежать необходимости загружать два, первые для начальной загрузки сети Java Запускаются и второе для запуска приложения, которое может потребовать определенной, но другой JVM.).exe
, но я не хочу, чтобы вторая подсказка подтвердила, что они доверяют .jar
файл, который будет из того же источника и подписан с тем же сертификатом.) Я предполагаю, что это потребует, чтобы автозагрузчик установил сертификат прежде, чем запустить JWS.).jar
файлы) в фоновом режиме одновременно с JVM. Это потребовало бы, чтобы кэш работал, прежде чем JVM будет установлена, таким образом, кэш должен был бы быть реализован в собственном коде и DownloadService
позже взаимодействовал бы через интерфейс к нему с помощью JNI.Продукту нравится, это существует? Я подозреваю, что это не делает, но Это стоит того, чтобы попытаться.
Обновление я нашел эту статью, которая имеет решения некоторых связанных проблем, хотя это разработано для офлайновой установки и я главным образом обеспокоен установкой онлайн.
Я столкнулся с той же проблемой. В итоге я получил 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.
Если у вас есть несколько программ запуска, я бы порекомендовал стратегию автоматического обновления.
Другой подход может заключаться в распространении Sun JRE с .BAT-файлом, вызывающим его с помощью переключателя / S, что вызывает автоматическую установку.
Я не видел ничего другого, позволяющего полностью бесшумную установку Java в сочетании с вызовом javaws.
Хорошо, я понимаю, что вы пытаетесь сделать, но почему вы не хотите использовать челюсти? Launch4J выглядит неплохим вариантом в качестве альтернативы установке java, так как он позволяет беспрепятственно использовать файл jar.
javaws более или менее использует java.exe с разрешениями безопасности и некоторыми параметрами запуска. Но разрешения безопасности можно отключить, если вы используете сертификат, которому доверяет пользователь.
Также я не уверен, когда был представлен javaws, но уверен, что он был доступен в java 1.5, который находится рядом с EOL. Поэтому, если у вашего пользователя не была установлена Java в течение многих лет, я сомневаюсь, что заставить их запустить jnlp будет проблемой. Даже если они используют более старую версию, вы можете добавить необходимую версию java в jnlp, и она будет автоматически загружена только для этого приложения.
Вы также можете рассмотреть возможность компиляции вашего проекта с помощью Excelsior JET. Помимо всего прочего, он также создает самодостаточный дистрибутив разумного размера.