2013-08-06 27 views
7

Tôi đã tạo một ứng dụng Hello World Swing đơn giản biên dịch và chạy tốt trong Eclipse. Bây giờ tôi đang cố gắng chuyển ứng dụng này sang cấu trúc gói Maven và chạy nó như một ứng dụng Java Web-Start, gây ra cho tôi nỗi đau lớn. Sau khi chạy "mvn clean install", javaws xuất hiện để tải trong vài giây và sau đó thoát.JNLP, Webstart và Maven

Dưới đây là một vài điều cần tham khảo. (Rất đơn giản) dự án của tôi nên đầy đủ tái sản xuất:

cấu trúc trọn gói (từ cây):

├── 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 chính:

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

Cảm ơn.

PS: Dự án tôi đang sử dụng là từ ví dụ trên trang web của Shaun Abram, tại đây: http://www.shaunabram.com/swing-webstart-maven-example/. Nó được thiết kế để giao tiếp với tomcat và chạy trên một máy chủ nhưng tôi cảm thấy như tôi sẽ có thể để có được điều này để làm việc tại địa phương. Tôi chỉ sử dụng nhánh SwingWebstartMaven-Client và bỏ qua nhánh SwingWebstartMaven-Web.

PPS: Tôi cảm thấy như tôi có thể đổi tên cấu trúc gói, nhưng vì một lý do nào đó tôi không thể. Bất cứ khi nào tôi cố gắng thay thế shaunabram với tên cuối cùng của tôi trong cấu trúc thư mục, việc kê khai gói trong file java của tôi, và trong file pom.xml, nó than phiền với:

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

EDIT: Vấn đề là giống hệt với trang này : I am not able launch JNLP applications using "Java Web Start"? ngoại trừ trên máy Ubuntu. Tôi đã gặp khó khăn trong việc tìm hiểu giải pháp của tác giả sẽ chuyển sang Ubuntu như thế nào (tôi đã thử cài đặt JAVAWS_HOME với jre bin và rerunning javaws của mình nhưng nó đã cho tôi cùng một vấn đề (tức là màn hình splash Java 6 bắt đầu và dừng lại khi không có chương trình tìm)). Nhấn đúp launch.jnlp chạy nó trong Java 7 (không phải những gì tôi muốn) và nhổ ra

"Error: Unable to load resource: http://localhost:8080/SwingWebstartMaven-Web/webstart/launch.jnlp." 

Sau thời điểm đó, tôi đã thử một vài thứ khác. Pom.xml chính có plugin tomcat, mà tôi không sử dụng, vì vậy tôi đã thử xóa nó, mà không làm bất cứ điều gì. Sau đó tôi đã thử thực sự tạo một máy chủ tomcat và đưa thư mục dự án vào/var/lib/tomcat7/webapps /. Điều này cũng không ảnh hưởng đến lỗi.

+0

"Không"? Bạn cũng thay thế shaunabram trong tên gói của lớp học? – chrylis

+1

Tôi đã làm, vâng. Xấu của tôi vì không đề cập đến điều đó; Đã cập nhật OP. – rkoth

+2

Nếu bạn downvote tôi, bạn có thể giải thích lý do tại sao? Có phải đó là đoạn mã vô cớ hay thực tế rằng đây thực sự là một câu hỏi vô lý? Điều gì sẽ là một cách tốt hơn để xây dựng câu hỏi? – rkoth

Trả lời

3

Đọc những gì Web Start thực sự thực hiện; đó là một cơ chế để đọc một bộ mô tả (ví dụ: điền số template.vm) và tải xuống và khởi chạy một ứng dụng Java thông thường từ nó (trái ngược với một applet). Nếu bạn đang chạy từ dòng lệnh và đã có jar, nó sẽ dư thừa. Nếu bạn thực sự muốn chơi với nó, bạn cần chỉnh sửa template.vm thành a valid JNLP descriptor file trỏ vào mã vùng cục bộ và sau đó sử dụng javaws heet.jnlp. Xem trang hướng dẫn sử dụng cho javaws và các liên kết chứa trong đó.

Đối với vấn đề Maven của bạn, có vẻ như bạn không có POM mẹ được tham chiếu được cài đặt và do đó Maven không biết kế thừa từ đó. Bạn sẽ cần phải thực hiện các thay đổi tương tự trên POM cha mẹ, cài đặt, và sau đó làm việc trên POM con.

+0

Vâng, tôi nhận ra có gì sai với tệp POM khoảng nửa giờ trước. Thời điểm derp chính. Đối với javaws ... sau khi thêm vào tất cả các file cha mẹ cũ và chạy javaws launch.jnlp, tôi chạy vào vấn đề cũ của nhấn Java 6 splash animation, chạy trong khoảng 18 giây trước khi thoát. Tôi sẽ cập nhật OP với thông tin có liên quan hơn vào buổi sáng. – rkoth

Các vấn đề liên quan