2010-01-09 2 views
8

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

The field <jar>href has an invalid value: helloworld.jar

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


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

<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-банки?

+0

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

ответ

19

I ' ve использовал a.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.

+0

И для этого не требуется какой-либо веб-сервер или файловый сервер, работающий на localhost, для анализа этого пути? – Ricket

+0

Нет, но локальная часть по-прежнему требуется. Не работает без него, работает, если вы его вложите. Принял меня полдня, чтобы понять :-) –

+0

Это действительно круто. Я хочу, чтобы ты был в январе, когда я возился с этим. Поскольку это тот ответ, который я искал, я переключу принятый ответ на вас. :) – Ricket

1

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

+0

Смысл этого в том, чтобы позволить мне просто дважды щелкнуть файл jar, чтобы запустить его, правильно? – Ricket

+0

Да. См. Также: http://java.sun.com/javase/6/docs/technotes/guides/jar/index.html – trashgod

+1

Я не верю, что Manifest.MF позволяет указать расположение родных библиотек. –

0

Как предлагает dhiller, добавление манифеста в JAR позволяет пользователям работать с физической копией без доступа к сети. Кроме того, вместо предоставления .jnlp, указывающего на местный JAR, укажите .jnlp, который ссылается на ваш сайт. Это позволит пользователям запускать последнюю и самую лучшую версию вашей программы и легко установить ярлык для дальнейшего использования.

2

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

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

0

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

+0

Не обязательно ... У NetBeans есть локальная опция запуска JNLP из коробки. Кроме того, если вы посмотрите комментарий @ Shrike, вы увидите, что местный отдел не так уж и трудный. –

4

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

<jnlp spec="1.0+"> 

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

Смежные вопросы