7

我创建了一个简单的 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-客户端 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);
  }
}

模板.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:我觉得我应该能够重命名包结构,但由于某种原因我不能。每当我尝试在目录结构、我的 java 文件中的包声明和 pom.xml 文件中用我的姓氏替换 shaunabram 时,它都会抱怨:

[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]

编辑:问题与此相同:我无法使用“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." 

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

4

1 回答 1

3

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

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

于 2013-08-06T05:50:56.653 回答