Java Webstart ClassNotFoundException WebSockets - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь преобразовать довольно сложное приложение, использующее несколько модулей, в использование webstart вместо эквивалента C #.(Я знаю, что webstart устарел и уходит. Это временное решение) Я использую maven-webstart-plugin и, похоже, столкнулся с проблемой, когда я получаю ClassNotFoundException при попытке загрузить библиотеку Java-Websockets,Проблема в том, что веб-сокеты включены в POM-файл одного из модулей приложения (я даже пытался добавить его в качестве явной зависимости в основном приложении).Он попадает в файл JNLP и определенно находится в папке lib, сгенерированной плагином webstart, поэтому я довольно озадачен тем, почему он не может его найти.Любая помощь будет принята с благодарностью.Я перепробовал все, что мог придумать (явная зависимость в основном проекте, перемещение вызова веб-сокетов в основное приложение - он просто перенес туда исключение).Я также включил отладчик Java, чтобы консоль появлялась при загрузке веб-страницы JNLP, и я вижу, что она загружает JAR WebSocket:

Исключение:

java.lang.ClassNotFoundException: org.java_websocket.client.WebSocketClient
    at java.net.URLClassLoader.findClass(Unknown Source)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.joy.system.SystemAppLaunch.main(SystemAppLaunch.java:329)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

Вывод на консоль:

Java Web Start 11.181.2.13 x86
Using JRE version 1.8.0_181-b13 Java HotSpot(TM) Client VM
User home directory = C:\Users\user
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread list
v:   dump thread stack
0-5: set trace level to <n>
----------------------------------------------------
CacheEntry[file:/C:/Users/user/Desktop/Alpha/apache-tomcat-9.0.0.M26/webapps/FB2HMI/lib/Java-WebSocket-1.3.0.jar]: updateAvailable=false,lastModified=Mon Nov 26 11:39:44 EST 2018,length=113538
Sep 11 15:24:07 EDT 2018,length=12913
System Application is started. Please wait......
#### Java Web Start Error:
#### org.java_websocket.client.WebSocketClient

Файл JNLP:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="" href="launch.jnlp">
    <information>
        <title>SystemApp</title>
        <vendor></vendor>
        <homepage href=""/>
        <description>System Application</description>
    <icon kind="splash" href="kom.jpeg"/>
            </information>
        <security>
     <all-permissions/>
  </security>

    <resources>
        <j2se version="1.7+"/>
    <jar href="lib/DaExecutive.jar"/>


    <jar href="lib/SystemApp-10.0.60.jar" main="true"/>

    <jar href="lib/DDS-10.0.60.jar"/>

    <jar href="lib/jackson-core-2.2.3.jar"/>

    <jar href="lib/jackson-coreutils-1.8.jar"/>

    <jar href="lib/msg-simple-1.1.jar"/>

    <jar href="lib/btf-1.2.jar"/>

    <jar href="lib/jackson-databind-2.2.3.jar"/>

    <jar href="lib/guava-16.0.1.jar"/>

    <jar href="lib/jsr305-2.0.1.jar"/>

    <jar href="lib/json-schema-core-1.2.5.jar"/>

    <jar href="lib/uri-template-0.9.jar"/>

    <jar href="lib/rhino-1.7R4.jar"/>

    <jar href="lib/json-schema-validator-2.2.6.jar"/>

    <jar href="lib/joda-time-2.3.jar"/>

    <jar href="lib/libphonenumber-6.2.jar"/>

    <jar href="lib/mailapi-1.4.3.jar"/>

    <jar href="lib/activation-1.1.jar"/>

    <jar href="lib/jopt-simple-4.6.jar"/>

    <jar href="lib/Utilities-10.0.60.jar"/>

    <jar href="lib/zip4j-1.2.3.jar"/>

    <jar href="lib/jackson-dataformat-xml-2.9.5.jar"/>

    <jar href="lib/jackson-annotations-2.9.0.jar"/>

    <jar href="lib/jackson-module-jaxb-annotations-2.9.5.jar"/>

    <jar href="lib/stax2-api-3.1.4.jar"/>

    <jar href="lib/woodstox-core-5.0.3.jar"/>

    <jar href="lib/Carousel-10.0.60.jar"/>

    <jar href="lib/CoreControls-10.0.60.jar"/>

    <jar href="lib/CommonInterface-1.0.0.jar"/>

    <jar href="lib/log4j-1.2.17.jar"/>

    <jar href="lib/json-20090211.jar"/>

    <jar href="lib/gson-1.4.jar"/>

    <jar href="lib/commons-io-2.4.jar"/>

    <jar href="lib/jna-4.1.0.jar"/>

    <jar href="lib/platform-3.4.0.jar"/>

    <jar href="lib/TableLayout-20050920.jar"/>

    <jar href="lib/CoreHMIAppBuilder-10.0.60.jar"/>

    <jar href="lib/Fb2HmiCm-10.0.64.jar"/>

    <jar href="lib/commons-collections4-4.0.jar"/>

    <jar href="lib/CoreStandardFeatures-10.0.60.jar"/>

    <jar href="lib/commons-net-3.6.jar"/>

    <jar href="lib/Java-WebSocket-1.3.0.jar"/>

    <jar href="lib/commons-configuration-1.6.jar"/>

    <jar href="lib/commons-collections-3.2.1.jar"/>

    <jar href="lib/commons-lang-2.4.jar"/>

    <jar href="lib/commons-logging-1.1.1.jar"/>

    <jar href="lib/commons-digester-1.8.jar"/>

    <jar href="lib/commons-beanutils-1.7.0.jar"/>

    <jar href="lib/commons-beanutils-core-1.8.0.jar"/>



    <property name="jnlp.serverip" value="192.168.0.50"/>
    <property name="jnlp.serverport" value="8080"/>
    </resources>
    <application-desc main-class="com.joy.system.SystemAppLaunch" name="SystemApp">
    <argument>8887</argument>
    <argument>192.168.0.50</argument>
    </application-desc>
</jnlp>

Мой файл POM выглядит следующим образом (для основного модуля приложения):

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>ParentProject</groupId>
        <artifactId>ParentProject</artifactId>
        <version>10.0.60</version>
        <relativePath>../ParentProject/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>SystemApp</groupId>
    <artifactId>SystemApp</artifactId>
    <name>SystemApp</name>
    <description>System Application</description>

    <dependencies>
        <dependency>
            <groupId>DDS</groupId>
            <artifactId>DDS</artifactId>
            <version>${dds-version}</version>
        </dependency>
        <dependency>
            <groupId>utility</groupId>
            <artifactId>Utilities</artifactId>
            <version>${utilities-version}</version>
        </dependency>
        <dependency>
            <groupId>Carousel</groupId>
            <artifactId>Carousel</artifactId>
            <version>${carousel-version}</version>
        </dependency>
        <dependency>
            <groupId>CoreControls</groupId>
            <artifactId>CoreControls</artifactId>
            <version>${coreControls-version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20090211</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>platform</artifactId>
            <version>3.4.0</version>
        </dependency>
        <dependency>
            <groupId>tablelayout</groupId>
            <artifactId>TableLayout</artifactId>
            <version>20050920</version>
        </dependency>
        <dependency>
            <groupId>CoreHMIAppBuilder</groupId>
            <artifactId>CoreHMIAppBuilder</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- Tell maven to compile using Java 1.8 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <fork>true</fork>
                    <executable>${JAVA_1_8_HOME}</executable>
                </configuration>
            </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-inline</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludeTransitive>false</excludeTransitive>
                    <makeArchive>false</makeArchive>
                    <filenameMapping>simple</filenameMapping>
                    <versionEnabled>false</versionEnabled>
                    <jnlpFiles>
                        <jnlpFile>
                            <templateFilename>template.vm</templateFilename>
                            <outputFilename>launch.jnlp</outputFilename>
                            <jarResources>
                                <jarResource>
                                    <groupId>SystemApp</groupId>
                                    <artifactId>SystemApp</artifactId>
                                    <name>SystemApp</name>
                                    <version>${project.version}</version>
                                    <mainClass>com.joy.system.SystemAppLaunch</mainClass>                                                       
                                </jarResource>
                            </jarResources>
                        </jnlpFile>
                    </jnlpFiles>
                    <unsignAlreadySignedJars>true</unsignAlreadySignedJars>
                    <canUnsign>true</canUnsign>
                    <libPath>lib</libPath>
                    <codebase></codebase>
                    <updateManifestEntries>
                        <Application-Name>SystemApp</Application-Name>
                        <Class-Path>resources/ resources/images/ resources/properties/ resources/config/</Class-Path>
                        <Trusted-Library>true</Trusted-Library>
                        <Permissions>all-permissions</Permissions>
                        <Codebase>*</Codebase>
                        <Trusted-Only>true</Trusted-Only>
                    </updateManifestEntries>
                    <jnlp>
                        <j2seVersion>1.7+</j2seVersion>
                        <outputFile>launch.jnlp</outputFile>
                        <mainClass>com.joy.system.SystemAppLaunch</mainClass>
                    </jnlp>
                    <sign>
                        <keystore>${project.basedir}/myKeystore.jks</keystore>
                        <storepass>password</storepass>
                        <alias>key_2017</alias>
                        <verify>false</verify>
                    </sign>
                    <verbose>true</verbose>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

1 Ответ

0 голосов
/ 26 ноября 2018

Если кто-то сталкивался с этим, я вручную добавил отдельный JAR-файл, который мне был нужен в приложении, в начало списка шаблонов jar-файлов.Вы можете видеть это в моем вышеупомянутом файле JNLP как DaExecutive.jar.Есть проблема с этим, которую я еще не решил, но он препятствовал загрузке всех зависимостей .jar, указанных ниже в списке.Удаление того, что позволило им загрузить.

...