2013-08-06 21 views
7

Eclipse'de derlenip çalıştırılan basit bir Hello World Swing uygulaması oluşturdum. Şimdi bu uygulamayı bir Maven paket yapısına aktarmaya ve büyük ağrılı bir Java Web-Start uygulaması olarak çalıştırmaya çalışıyorum. "Mvn clean install" komutunu çalıştırdıktan sonra, javaws'ın birkaç saniyeliğine yüklenmesi ve sonra çıkması gerekir.JNLP, Webstart ve Maven

Referans için birkaç şey aşağıda verilmiştir. Benim (çok basit) projesi tamamen tekrarlanabilir olması gerekir: (ağaçtan)

Paket yapısı:

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

İlköğretim 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> 

teşekkürler.

Not: Kullanmakta olduğum proje, Shaun Abram'ın web sitesindeki bir örnektir: http://www.shaunabram.com/swing-webstart-maven-example/. Tomcat ile bağlantı kurmak ve bir sunucuda çalıştırmak için tasarlanmıştı ama bunu yerel olarak çalışmak için kullanabilmem gerektiğini hissediyorum. SwingWebstartMaven-Client şubesini kullanıyorum ve SwingWebstartMaven-Web şubesini görmezden geliyorum.

PPS: Paket yapısını yeniden adlandırmam gerektiğini hissediyorum, ancak bazı nedenlerle yapamam.

[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: Ben dizin yapısında benim soyadı taşıyan shaunabram değiştirmeyi deneyin zaman, paketin benim java dosyasında beyan ve pom.xml dosyasında, onunla şikayet sorun bu bir aynıdır Bir Ubuntu makinesi hariç I am not able launch JNLP applications using "Java Web Start"?. Yazarın çözümünün Ubuntu'ya nasıl dönüştüğünü anlamakta güçlük çekiyorum (JAVAWS_HOME'u jre bölüme ayarlamaya çalıştım ve javaws'ı tekrar denedim ama aynı problemi verdi (yani Java 6 açılış ekranı başladı ve daha sonra hiçbir program olmadan durdu) bulunan)). Çift tıklama launch.jnlp Java 7 (istediğim gibi değil) bir şekilde çalıştırmaya ve bu noktadan sonra

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

tükürür, birkaç başka şeyler denedik. Birincil pom.xml, kullanmadığım tomcat eklentisine sahipti, bu yüzden herhangi bir şey yapmayan silme işlemini denedim. Daha sonra bir tomcat sunucusu oluşturmayı ve proje klasörünü/var/lib/tomcat7/webapps/dizinine koymayı denedim. Bu ayrıca hatada herhangi bir değişiklik yapmamıştır.

+0

"Başarısızlıklar"? Ayrıca, shaunabram'ı sınıfın paket adıyla değiştirdiniz mi? – chrylis

+1

Yaptım, evet. Bundan bahsetmemek benim için kötü; OP güncellendi. – rkoth

+2

Beni reddederseniz, nedenini açıklayabilir misiniz? Bu gereksiz kod parçacıkları mı yoksa bu gerçekten de noobish bir soru mu? Soruyu formüle etmenin daha iyi bir yolu ne olurdu? – rkoth

cevap

3

Web Start'ın gerçekte ne yaptığını okuyun; Bir tanımlayıcıyı (örneğin, doldurulmuş olan template.vm) okumak ve düzenli bir Java uygulamasını indirip başlatmak için kullanılan bir mekanizmadır (bir uygulamanın aksine). Komut satırından koşuyorsanız ve zaten kavanoza sahipseniz, gereksizdir. Gerçekten onunla oynamak istiyorsanız, template.vm'u a valid JNLP descriptor file'a yerel kod tabanındaki noktaları işaretleyin ve javaws heet.jnlp kullanın. javaws için man sayfasına ve içerdiği bağlantılara bakın.

Maven sorununuz için, başvurulan ana POM uygulamasına sahip olmadığınız anlaşılıyor ve Maven'in ne tür bir devralmayacağını bilmemesi gerekiyor. Üstteki POM'de aynı değişiklikleri gerçekleştirmeniz, kurmanız ve daha sonra POM üzerinde çalışmanız gerekir.

+0

Evet, yaklaşık yarım saat önce POM dosyasında neyin yanlış olduğunu anladım. Binbaşı derp anı. Javaws gelince ... tüm eski ana dosyaları ekledikten ve javaws launch.jnlp çalıştırdıktan sonra, ben çıkmadan önce yaklaşık 18 saniye boyunca çalışan Java 6 sıçrama animasyonuna isabet eski sorunla karşılaşıyorum. OP'yi sabahları daha ilgili bilgilerle güncelleyeceğim. – rkoth