Локальная альтернатива файлу JNLP? - PullRequest
9 голосов
/ 09 января 2010

Как ни старайся, я не могу заставить файл JNLP работать локально (двойным щелчком). Кажется, это проблема поиска файла jar, даже если я его укажу относительно файла jnlp. Я получаю следующую ошибку:

Поле href имеет недопустимый значение: helloworld.jar

Это происходит, даже если файл JNLP находится в той же папке, что и helloworld.jar. Я провел поиск, и это постоянная проблема, особенно для людей, которые хотят упаковать приложение на CD и использовать JNLP. Единственное предоставленное Sun «решение» - это возможность задавать кодовую базу через командную строку, но это не очень помогает. Я не понимаю, почему они не предполагают или не позволяют кодовой базе быть "." или "файл: //." - Я пробовал подобные вещи в параметре codebase тега jnlp (внутри файла), и ничего не получалось.


Мне очень удобно использовать файл JNLP, потому что мне не нужно беспокоиться об обнаружении платформы, собственных библиотеках или даже основных JAR-файлах JOGL; Я просто включаю эту строку, и все для меня сделано:

<extension name="JOGL" href="http://download.java.net/media/jogl/builds/archive/jsr-231-2.0-beta10/webstart/jogl-all-awt.jnlp" />

Я надеюсь найти что-то, что может сделать то же самое. Если нет, я могу вручную (или с помощью Ant) получить JAR-файлы JOGL, это не имеет большого значения; только одна из тех вещей, которые JNLP делает для меня, и я действительно буду скучать.


Какова лучшая альтернатива файлам JNLP, для меня, чтобы использовать локально (то есть двойной запуск для запуска)? Есть ли что-нибудь настолько элегантное или мне просто нужно написать сценарий оболочки для Linux, командный файл для Windows и заставить Ant обнаруживать и загружать соответствующие файлы JOGL?

Ответы [ 5 ]

20 голосов
/ 10 марта 2010

Я использовал такой файл .jnlp для локального запуска программного обеспечения Java Web Start

  1. укажите код базы следующим образом: <jnlp spec="1.0+" codebase="file://localhost/X:/path/to/jnlp/" href="software.jnlp">

  2. список ресурсов с относительными путями: <resources> <jar href="lib/software.jar" main="true" /> <jar href="lib/softwareLibrary.jar" main="true" /> ... </resources>

  3. и, наконец, сообщите Web Start, где он может найти точку входа программного обеспечения внутри банки, помеченной main="true": <application-desc main-class="com.example.Main" />

Единственное, что вам нужно изменить при удаленном развертывании, - это параметр codebase.

4 голосов
/ 21 июня 2012

Просто удалите атрибуты codebase и href из тега jnlp.

<jnlp spec="1.0+">

Это поддерживается начиная с версии Java 1.6u18.

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

Система JNLP была улучшена с помощью Java 6 update 10 (некоторое время назад), но ее все еще довольно сложно отладить (включая полную трассировку в консоли Java и пошаговое выполнение исходного кода javaws.

В твоей ситуации я бы сделал лишнюю милю и заставил бы ее работать. Возможно, вы предоставите полный JNLP-файл, показывающий проблему?

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

Используйте манифест для своей банки. Там вы можете определить основной класс для запуска и необходимые библиотеки. См. Аргументы Main-class и Class-path в спецификации манифеста.

0 голосов
/ 20 января 2010

JNLP предназначен для запуска по сети (в частности, http (s)) и без сети реализация Java должна быть действительно запутанной. Даже зрелые проекты, такие как eclipse stick с опцией .sh, .bat.

...