2013-08-06 33 views
7

Stworzyłem prostą aplikację Hello World Swing, która kompiluje i działa dobrze w Eclipse. Teraz próbuję przenieść tę aplikację do struktury pakietu Maven i uruchomić ją jako aplikację Java Web-Start, co powoduje ogromny ból. Po uruchomieniu "mvn clean install", javaws wydaje się ładować przez kilka sekund, a następnie zakończyć.JNLP, Webstart i Maven

Oto kilka informacji. Moja (bardzo proste) projekt powinien być w pełni powtarzalne:

struktura pakietu (z drzewa):

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

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

pom.xml SwingWebstart-Client

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

Dzięki.

PS: Projekt, którego używam, pochodzi z przykładu na stronie Shaun Abrama, tutaj: http://www.shaunabram.com/swing-webstart-maven-example/. Został zaprojektowany do współpracy z tomcat i uruchamiany na serwerze, ale mam wrażenie, że powinienem móc go uruchomić na miejscu. Używam tylko gałęzi SwingWebstartMaven-Client i ignoruję gałąź SwingWebstartMaven-Web.

PPS: Czuję, że powinienem móc zmienić nazwę struktury paczki, ale z jakiegoś powodu nie mogę. Ilekroć próbuję zastępując shaunabram z moim nazwiskiem w strukturze katalogów, deklaracja pakiet w moim pliku java, aw pliku pom.xml, narzeka z:

[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: Problem jest identyczny do tego : I am not able launch JNLP applications using "Java Web Start"? z wyjątkiem komputera z systemem Ubuntu. Mam trudności ze zrozumieniem, w jaki sposób rozwiązanie autora przełożyłoby się na Ubuntu (próbowałem ustawić JAVAWS_HOME na moim bin bin i ponownie uruchamiając javaws, ale to dało mi ten sam problem (tj. Ekran powitalny Java 6 uruchamia się, a następnie zatrzymuje bez żadnego programu uznany)). Dwukrotne kliknięcie launch.jnlp uruchamia go w Java 7 (nie to, co chcę) i wypluwa

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

Po tym punkcie, próbowałem kilka innych rzeczy. Pierwotny plik pom.xml zawierał wtyczkę tomcat, której nie używałem, więc spróbowałem ją usunąć, która nic nie zrobiła. Następnie spróbowałem stworzyć serwer tomcat i umieścić folder projektu w/var/lib/tomcat7/webapps /. To również nie spowodowało zmiany błędu.

+0

"Fails"? Czy zastąpiłeś również shaunabram w nazwie pakietu klasy? – chrylis

+1

Zrobiłem, tak. Moja zła za to, że o tym nie wspomniałem; OP został zaktualizowany. – rkoth

+2

Jeśli zgodziłeś się ze mną, czy możesz wyjaśnić, dlaczego? Czy jest to nieuzasadnione fragmenty kodu lub fakt, że jest to naprawdę nieobligacyjna kwestia? Jaki byłby lepszy sposób sformułowania pytania? – rkoth

Odpowiedz

3

Przeczytaj, na czym polega Web Start; jest to mechanizm do odczytywania deskryptora (np. wypełnionego template.vm) oraz pobierania i uruchamiania z niego zwykłej aplikacji Java (w przeciwieństwie do apletu). Jeśli używasz wiersza poleceń i już posiadasz słoik, jest on zbędny. Jeśli naprawdę chcesz się z tym bawić, musisz zmodyfikować template.vm w a valid JNLP descriptor file, która wskazuje lokalną bazę kodów, a następnie użyj javaws heet.jnlp. Zobacz stronę podręcznika dla użytkownika javaws i zawarte w niej łącza.

Jeśli chodzi o problem Mavena, wygląda na to, że nie masz zainstalowanego macierzystego POM, a więc Maven nie wie, co odziedziczyć. Będziesz musiał wykonać te same zmiany w macierzystym POM, zainstalować, a następnie pracować nad potomkiem POM.

+0

Tak, zdałem sobie sprawę, co było nie tak z plikiem POM około pół godziny temu. Poważny moment wywrotki. Jeśli chodzi o javaws ... po dodaniu wszystkich starych plików nadrzędnych i uruchomieniu javaws launch.jnlp, napotykam stary problem z wyświetlaniem animacji splash 6 Java, która działa przez około 18 sekund przed wyjściem. Będę aktualizować PO bardziej istotnymi informacjami rano. – rkoth

Powiązane problemy