2013-08-06 55 views
7

我创建了一个简单的Hello World Swing应用程序,它在Eclipse中编译和运行得很好。我现在试图将这个应用程序转移到Maven包结构中,并将其作为Java Web-Start应用程序运行,这给我带来了很大的痛苦。运行“mvn clean install”后,javaws似乎会加载几秒钟,然后退出。JNLP,Webstart和Maven

这里有几件事情可供参考。我的(很简单)项目应该是完全可再现:

封装结构(从一棵树):

├── 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客户端的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 /中。这也没有改变错误。

+0

“失败”?你是否也在班级名称中替换shaunabram? – chrylis

+1

我做到了,是的。我不好意思说这个; OP已更新。 – rkoth

+2

如果你冷落我,你能解释为什么吗?它是免费的代码片段还是这是一个真正不讨好的问题?制定这个问题的更好方法是什么? – rkoth

回答

3

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

至于你的Maven问题,你似乎没有安装引用的父POM,所以Maven不知道要继承什么。您需要在父POM上执行相同的更改,然后安装,然后在子POM上工作。

+0

是的,我意识到半小时前POM文件出了什么问题。重要的时刻。至于javaws ...添加所有旧的父文件并运行javaws launch.jnlp后,我遇到了碰到Java 6飞溅动画的旧问题,该动画在退出之前运行约18秒。我会在早上更新OP的相关信息。 – rkoth

相关问题