JNLP,Webstart和Maven

rko*_*oth 7 java jnlp java-web-start maven

我创建了一个简单的Hello World Swing应用程序,它可以在Eclipse中编译和运行.我现在正在尝试将此应用程序转移到Maven包结构并将其作为Java Web-Start应用程序运行,这让我感到非常痛苦.运行"mvn clean install"后,javaws似乎加载了几秒钟然后退出.

以下是一些可供参考的内容.我(非常简单)的项目应该是完全可重现的:

包结构(来自树):

??? pom.xml
??? readme.txt
??? SwingWebstartMaven-Client
?   ??? pom.xml
?   ??? src
?   ?   ??? main
?   ?   ?   ??? java
?   ?   ?   ?   ??? com
?   ?   ?   ?       ??? shaunabram
?   ?   ?   ?           ??? swingwebstartmaven
?   ?   ?   ?               ??? HelloWorldSwing.class
?   ?   ?   ?               ??? HelloWorldSwing.java
?   ?   ?   ??? jnlp
?   ?   ?   ?   ??? template.vm
?   ?   ?   ??? resources
?   ?   ??? test
?   ??? target
?       ??? classes
?       ?   ??? com
?       ?       ??? shaunabram
?       ?           ??? swingwebstartmaven
?       ?               ??? HelloWorldSwing.class
?       ??? jnlp
?       ?   ??? launch.jnlp
?       ?   ??? lib
?       ?   ?   ??? SwingWebstartMaven-Client-1.0.jar
?       ?   ??? SwingWebstartMavenExample-KeyStore
?       ??? maven-archiver
?       ?   ??? pom.properties
?       ??? surefire
?       ??? SwingWebstartMaven-Client-1.0.jar
?       ??? SwingWebstartMaven-Client-1.0.zip
??? SwingWebstartMaven-Web
    ??? pom.xml
    ??? src
    ?   ??? main
    ?   ?   ??? java
    ?   ?   ??? resources
    ?   ?   ??? webapp
    ?   ?       ??? index.html
    ?   ?       ??? WEB-INF
    ?   ?           ??? web.xml
    ?   ??? test
    ??? target
        ??? classes
        ??? maven-archiver
        ?   ??? pom.properties
        ??? surefire
        ??? SwingWebstartMaven-Web-1.0
        ?   ??? index.html
        ?   ??? META-INF
        ?   ??? WEB-INF
        ?       ??? classes
        ?       ??? web.xml
        ??? SwingWebstartMaven-Web-1.0.war
Run Code Online (Sandbox Code Playgroud)

主要pom.xml:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shaunabram.swingwebstartmaven</groupId>
    <artifactId>SwingWebstartMaven</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>SwingWebstartMaven Project</name>

    <modules>
        <module>SwingWebstartMaven-Client</module>
        <module>SwingWebstartMaven-Web</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.5</source>
                        <target>1.5</target>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>tomcat-maven-plugin</artifactId>
                    <configuration>
                        <url>http://localhost:8080/manager</url>
                        <username>tomcat</username>
                        <password>tomcat</password>
                    </configuration>
                </plugin>

            </plugins>
        </pluginManagement>
    </build>

</project>
Run Code Online (Sandbox Code Playgroud)

SwingWebstart-Client pom.xml

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.shaunabram.swingwebstartmaven</groupId>
        <artifactId>SwingWebstartMaven</artifactId>
        <version>1.0</version>
    </parent>
    <artifactId>SwingWebstartMaven-Client</artifactId>
    <packaging>jar</packaging>
    <name>SwingWebstartMaven Client</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo.webstart</groupId>
                <artifactId>webstart-maven-plugin</artifactId>
                <version>1.0-beta-2</version>

                <executions>
                    <execution>
                        <id>package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>jnlp-inline</goal>
                        </goals>
                    </execution>
                </executions>

                <configuration>
                    <jnlp>
                        <outputFile>launch.jnlp</outputFile>
                        <mainClass>com.shaunabram.swingwebstartmaven.HelloWorldSwing</mainClass>
                    </jnlp>

                    <libPath>lib</libPath>

                    <sign>
                        <keystore>SwingWebstartMavenExample-KeyStore</keystore>
                        <keypass>YourPassword</keypass>
                        <storepass>YourPassword</storepass>
                        <alias>SwingWebstartMavenExample</alias>
                        <validity>3650</validity>

                        <dnameCn>Your Name</dnameCn>
                        <dnameOu>Organizational Unit</dnameOu>
                        <dnameO>Organization</dnameO>
                        <dnameL>City or Locality</dnameL>
                        <dnameSt>State or Province</dnameSt>
                        <dnameC>US</dnameC>

                        <verify>true</verify>
                        <keystoreConfig>
                            <delete>true</delete>
                            <gen>true</gen>
                        </keystoreConfig>
                    </sign>

                    <pack200>false</pack200>
                    <gzip>true</gzip>
                    <outputJarVersions>false</outputJarVersions>
                    <verbose>true</verbose>

                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
Run Code Online (Sandbox Code Playgroud)

SwingWebstartMaven-Web pom.xml

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.shaunabram.swingwebstartmaven</groupId>
        <artifactId>SwingWebstartMaven</artifactId>
        <version>1.0</version>
    </parent>

    <artifactId>SwingWebstartMaven-Web</artifactId>
    <packaging>war</packaging>
    <name>SwingWebstartMaven Web</name>

    <dependencies>

    </dependencies>

</project>
Run Code Online (Sandbox Code Playgroud)

HelloWorldSwing.java:

package com.shaunabram.swingwebstartmaven;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class HelloWorldSwing {
  public static void main(String[] args) {
    JFrame frame = new JFrame("HelloWorldSwing");
    final JLabel label = new JLabel("Hello World");
    frame.getContentPane().add(label);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}
Run Code Online (Sandbox Code Playgroud)

template.vm:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/SwingWebstartMaven-Web/webstart" href="$outputFile">
 <information>
    <title>Swing Webstart Maven Project</title>
    <vendor>ShaunAbram</vendor>
 </information>
 <security>
 <all-permissions/>
 </security>
 <resources>
    <j2se version="1.5+" initial-heap-size="32m" max-heap-size="128m" />
    <property name="jnlp.versionEnabled" value="false"/>
    $dependencies
 </resources>
 <application-desc main-class="$mainClass">
 </application-desc>
</jnlp>
Run Code Online (Sandbox Code Playgroud)

谢谢.

PS:我正在使用的项目来自Shaun Abram网站上的一个例子:http://www.shaunabram.com/swing-webstart-maven-example/.它被设计为与tomcat接口并在服务器上运行,但我觉得我应该能够让它在本地工作.我只是使用SwingWebstartMaven-Client分支并忽略SwingWebstartMaven-Web分支.

PPS:我觉得我应该可以重命名包结构,但出于某种原因我不能.每当我尝试用目录结构中的姓氏替换shaunabram,我的java文件和pom.xml文件中的包声明时,它会抱怨:

[ERROR]   The project com.kothur.swingwebstartmaven:SwingWebstartMaven-Client:1.0 (/media/reivei/New Volume/Project Files/SwingWebstartMaven/SwingWebstartMaven-Client/pom.xml) has 1 error
[ERROR]     Non-resolvable parent POM: Failure to find com.kothur.swingwebstartmaven:SwingWebstartMaven:pom:1.0 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2]
Run Code Online (Sandbox Code Playgroud)

编辑:问题与此问题相同:我无法使用"Java Web Start"启动JNLP应用程序?除了在Ubuntu机器上.我很难理解作者的解决方案将如何转换为Ubuntu(我尝试将JAVAWS_HOME设置为我的jre bin并重新运行javaws但它给了我同样的问题(即Java 6启动画面启动然后停止,没有程序是发现)).双击launch.jnlp在Java 7中运行它(不是我想要的)并吐出

"Error: Unable to load resource: http://localhost:8080/SwingWebstartMaven-Web/webstart/launch.jnlp." 
Run Code Online (Sandbox Code Playgroud)

在那之后,我尝试了其他一些事情.主要的pom.xml有tomcat插件,我没有使用它,所以我尝试删除它,它没有做任何事情.然后我尝试创建一个tomcat服务器并将项目文件夹放在/ var/lib/tomcat7/webapps /中.这也不会改变错误.

chr*_*ke- 3

了解 Web Start 的实际用途;它是一种读取描述符(例如,填充的template.vm)并从中下载和启动常规Java应用程序(而不是小程序)的机制。如果您从命令行运行并且已经有了 jar,那么它是多余的。如果您确实想使用它,则需要编辑template.vm指向本地代码库的有效 JNLP 描述符文件javaws heet.jnlp,然后使用. 请参阅手册页javaws及其包含的链接。

至于您的 Maven 问题,看来您没有安装引用的父 POM,因此 Maven 不知道要继承什么。您需要对父 POM 执行相同的更改、安装,然后处理子 POM。