Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > webstart-maven-plugin error Unknown Source


Автор: ZVano 16.12.2015, 18:06
Суть вопроса:
* понять почему возникает ошибка;
* получить информацию, которая поможет устранить ошибку;


Рабочая среда:
* Ubuntu 14.04 TLS (x64)
* Apache/2.4.7 (Ubuntu)
* Apache Maven 2.2.1 (rdebian-14)
* Java version: 1.8.0_66
* Java home: /usr/lib/jvm/java-8-oracle/jre
* NetBeans 8.1

Имеем простейшее приложение, предназначеное для запуска через JNLP.
Код

package zim.jnlp;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        System.out.println("Main/main");
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter your word: ");
        String s = scan.next();
        System.out.println("Last word: "+s);
    }
}


Проект создан в NetBeans и находится под управлением Maven (на основании pom.xml).
Сборка JNLP производится плагином http://www.mojohaus.org/webstart/webstart-maven-plugin/usage.html.
После сборки получаем результат в каталоге '/jnlp/sample0/target/zim.jnlp.sample0-1.0-SNAPSHOT.zip'
Содержимое архива:
  • /lib/zim.jnlp.sample0-1.0-SNAPSHOT.jar
  • sample0.jnlp
Ложу содержимое архива в папку локального web-сервера под Apache2.
Иду по ссылке http://cts.local/java/DioWebServer/
Кликаю по sample0.jnlp
Запускается "IcedTea Java Web Start", которая ассоциирована с *.jnlp
Получаю ошибку 
Код

com.sun.deploy.net.FailedDownloadException: Unable to load resource: http://cts.local/java/DioWebServer/sample0.jnlp
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)


Если запустить jar из консоли, то приложение отрабатывает нормально.

Вот фрагмент конфигурации "webstart-maven-plugin"
Код


            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>webstart-maven-plugin</artifactId>
                <version>1.0-beta-6</version>
                <dependencies>
                    <dependency>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>keytool-api-1.7</artifactId>
                        <version>1.5</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jnlp</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <libPath>lib</libPath>
                    <codebase>http://cts.local/java/DioWebServer</codebase>
                    <jnlp>
                        <outputFile>sample0.jnlp</outputFile>
                        <mainClass>zim.jnlp.Main</mainClass>
                    </jnlp>
                </configuration>
            </plugin>


Вот такой получили манифест:
Код

Manifest-Version: 1.0
Implementation-Title: zim.jnlp.sample0
Implementation-Version: 1.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: ivan
Specification-Title: zim.jnlp.sample0
Implementation-Vendor-Id: zim
Version: 
Created-By: Apache Maven 3.0.5
Build-Jdk: 1.8.0_65
Specification-Version: 1.0-SNAPSHOT
Main-Class: zim.jnlp.Main


Вот такой получился "sample0.jnlp"
Код

<?xml version="1.0" encoding="UTF-8"?>
<jnlp
    spec="1.0+"
    codebase="http://cts.local/java/DioWebServer"
    href="sample0.jnlp">
  <information>
    <title>zim.jnlp.sample0</title>
  </information>
  <security>
     <all-permissions/>
  </security>
  <resources>
    <j2se version="1.5+"/>
    <jar href="lib/zim.jnlp.sample0-1.0-SNAPSHOT.jar" main="true"/>
  </resources>
  <application-desc main-class="zim.jnlp.Main"/>
</jnlp>


К топику прилагаю архив с микро-проектом.

Автор: ZVano 16.12.2015, 18:57
Прилаживаю скрин ошибки.

Автор: LSD 16.12.2015, 19:08
В JNLP прописано:
Код

<jar href="lib/zim.jnlp.sample0-1.0-SNAPSHOT.jar" main="true"/>

т.е. ожидается что jar файл будет лежать в папке lib, а по факту он лежит в той же папке.

Автор: ZVano 17.12.2015, 12:33
Цитата(LSD @  16.12.2015,  19:08 Найти цитируемый пост)
т.е. ожидается что jar файл будет лежать в папке lib, а по факту он лежит в той же папке.

Причина не в этом. Файл "zim.jnlp.sample0-1.0-SNAPSHOT.jar" скопирован в обе папки.
1. В проекте был просроченый самописный сертификат.
Сгенерил новый таким баником:
Код

set ksDir=e:\diosrc\javaKeytool
set ksFileName=zimTest.ks
set ksAlias=testalias
set ksFilePath=%ksDir%\%ksFileName%
set ksPass=testkeys
set kskPass=testkeys
set kskDname="cn=Mark Jones, ou=Java, o=Oracle, c=US" 
@rem Генерируем хранилище и ключ в нем
keytool -genkeypair -dname %kskDname% -alias %ksAlias% -keypass %kskPass% -keystore %ksFilePath% -storepass %ksPass%
@rem Выводим на экран список сертификатов в хранилище
keytool -list -keystore %ksFilePath% -storepass %ksPass% -keypass %kskPass%  
pause

2. Под Linux не работает ни под каким соусом.
3. Под Windows работает, если не использовать java.util.Scanner

Почему один и тот же *.jnlp + *.jar по разному работают в разных ОС?
URL, с которого загружаются файлы, одинаковый (http://cts.local/java/test/)
Эта непонятка выносит мне мозг т.к. я считал, что байткод Java будет одинаково работать на всех платформах, где есть JRE. Естественно, при условиии что код не использует платформеннозависимые вещи.

Переделал пример, чтобы он выводил диалоговое окно.
Под Widows работает, а под Linux валится с ошибкой.
Код

package zim.jnlp;
import java.awt.Component;
import javax.swing.JOptionPane;
public class Main {
    public static void main(String[] args) {
            System.out.println("Main/main");
            Component frame = null ;
            JOptionPane.showMessageDialog(frame, "Main/main/showMessageDialog");
    }
}


Ошибка такая:
Код

#### Java Web Start Error:
com.sun.deploy.net.FailedDownloadException: Unable to load resource: http://cts.local/java/test/sample0.jnlp
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.Launcher.updateFinalLaunchDesc(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
    at com.sun.javaws.Launcher.launch(Unknown Source)
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:745)


Версии java командой java -version
Код

   На  Windows:
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)
   На Linux
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)


К сообщению прикладываю обновленный проект "jnlp_sample0_20151217_1127.zip", который работает в windows и не работает под Linux.

Автор: ZVano 17.12.2015, 15:59
На другом компьютере приложение работает (версия Ubuntu и Java идентичны) .
Получается, проблемма только в моей копии Linux и у Вас врядли повторится.
Буду грызть...

PS: На компьютере с Fedora проблемма повторилась и мы ее полечили.
Причина оказалась в том, JNLP-файл открывался не стандартным javaws, а какой то левой программой автозапуска (IcedTea Java Web Start).
На компе с проблемной Ubuntu та же программа.
Перепривязка на родную javaws из JRE 1.8 проблему в Ubuntu не решила.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)