JNLP,Webstart和Maven

时间:2013-08-06 04:41:10

标签: java maven jnlp java-web-start

我创建了一个简单的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

主要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>

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>

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>

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);
  }
}

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>

感谢。

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]

编辑:问题与此问题相同:I am not able launch JNLP applications using "Java Web Start"?,但在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." 

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

1 个答案:

答案 0 :(得分:3)

了解Web Start实际上做了什么;它是一种读取描述符(例如,填充的template.vm)并从中下载并启动常规Java应用程序(与applet相对)的机制。如果你从命令行运行并且已经有了jar,那就多余了。如果您真的想要使用它,则需要将template.vm编辑为指向本地代码库的a valid JNLP descriptor file,然后使用javaws heet.jnlp。请参阅javaws的手册页及其包含的链接。

至于您的Maven问题,您似乎没有安装引用的父POM,因此Maven不知道要从哪个继承。您需要在父POM上执行相同的更改,安装,然后处理子POM。