Przygotowanie wersji webstart naszej aplikacji wymaga utworzenia pliku JNLP, przygotowania i podpisania bibliotek jar oraz umieszczenia wszystkiego na serwerze tak aby całość była dostępna poprzez protokół http.
W automatyzacji tego procesu może pomóc nam wtyczka do Maven2 o nazwie webstart-maven-plugin.
Będziemy potrzebowali:
- pliku z kluczem (możemy go wygenerować za pomocą keygen)
- szablonu pliku JNLP:
<?xml version="1.0" encoding="utf-8"?>
<jnlp
spec="1.0+"
codebase="http://localhost:8080/webstart/"
href="$outputFile">
<information>
<title>Moja aplikacja 123</title>
<vendor>3e software house <vendor/>
<homepage>http://3e.pl<homepage/>
<description kind="one-line"> </description>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.4+"
initial-heap-size="32m"
max-heap-size="128m"
/>
$dependencies
</resources>
<application-desc main-class="$mainClass">
<argument>1</argument>
<argument>2</argument>
</application-desc>
</jnlp>
Do pliku pom.xml dodajemy opis nowej wtyczki:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>webstart-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jnlp</goal>
</goals>
</execution>
</executions>
<configuration>
<dependencies>
<excludes>
<exclude>commons-lang:commons-lang</exclude>
</excludes>
</dependencies>
<jnlp>
<inputTemplate>src/main/jnlp/template.vm</inputTemplate>
<outputFile>test.jnlp</outputFile>
<mainClass>com._3e.TestWebStart.MainWindow</mainClass>
</jnlp>
<sign>
<keystore>${project.basedir}/keystore/naszklucz</keystore>
<keypass>KODKLUCZA</keypass>
<storepass>KODPRZECHOWANIA</storepass>
<!--sigfile>m2m2m2</sigfile-->
<alias>AliasPlikuKlucza </alias>
<validity>180</validity>
<dnameCn>www.example.com</dnameCn>
<dnameOu>None</dnameOu>
<dnameO>ExampleOrg</dnameO>
<dnameL>Seattle</dnameL>
<dnameSt>Washington</dnameSt>
<dnameC>US</dnameC>
<verify>true</verify>
</sign>
<verbose>false</verbose>
</configuration>
</plugin>
Następnie uruchamiamy:
mvn install webstart:jnlp
Możliwe problemy:
Wszystko się zbudowało bez błędu, ale podczas uruchamiania pojawia się błąd:
JAR resources in JNLP file are not signed by the same certificate
Rozwiązanie:
Prawdopodobnie któraś z załączanych bibliotek była wcześniej podpisana. Niestety w takiej sytuacji maven nie zgłasza błedu.
Można jednak łatwo sprawdzić czy taka sytuacja nie miała miejsca analizując wyświetlane komunikaty podczas budowania - wtyczka webstart-maven-plugin wyświetli dla niej:
XYZ.jar is already signed. Skipping.
W takiej sytuacji musimy usunąć podpis z takiej biblioteki i ponownie zbudować projekt.
Referencje:
http://java.sun.com/docs/books/tutorial/jar/sign/signing.html
http://forum.java.sun.com/thread.jspa?threadID=704775&messageID=4086848
2 komentarze:
Aby Maven automatycznie usuwał podpisy w bibliotekach wchodzacych w sklad webstart i podpisywal wszystko naszym certyfikatem, nalezy dopisac
<unsign>true</unsign>
w konfiguracji (wewnątrz tagu <configuration>) pluginu webstart-maven-plugin.
Źródło: http://fisheye.codehaus.org/browse/mojo/trunk/mojo/webstart-maven-plugin/plugin/src/site/apt/jnlp-mojos-overview.apt?r=5983&%40annotateMode=blame
Hej, mam problem z zapakowaniem jnlp w wara (tak, żeby webstart dociągał tylko różnice). Wiem że się da to zrobić ręcznie, ale czy te wtyczki do mavena to umieją?
Nie wspomnę o dokumentacji do nich bo to woła o pomstę do nieba.
Pozdr,
Daniel
Prześlij komentarz