Wir haben uns entschieden, unsere JNLP-Dateien zu signieren, indem wiroracle guide folgen. Da wir verschiedene JNLPs haben, haben wir uns für den zweiten Ansatz entschieden (Signieren einer JAR-Datei mit einer JNLP-Vorlage)."JNLPSigningException [Validierung des Signierens der Startdatei fehlgeschlagen]" beim Starten eines von der Vorlage signierten JNLP
Hier ist der Code, den wir in die Vorlage extrahiert:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="*" href="*">
<information>
<title>*</title>
<vendor>My vendor</vendor>
<description>My description</description>
<icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
<offline-allowed />
<shortcut>
<menu submenu="My submenu"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources locale="en es ja">
<j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="myjar.jar" main="true" download="lazy" part="core" size="*"/>
<jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
...
<jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
<property name="jnlp.myProperty" value="*"/>
<property name="log4j.configuration" value="*"/>
</resources>
<application-desc main-class="com.mycom.myapp.MyClass">
</application-desc>
</jnlp>
... und hier ist eine der JNLPs verwenden wir tatsächlich:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://mylocation.mycom.com/jnlp/myapp/" href="myapp.jnlp">
<information>
<title>My App - Production version</title>
<vendor>My vendor</vendor>
<description>My description</description>
<icon href="splash.jpg" kind="splash" width="700" height="400" size="115258"/>
<offline-allowed />
<shortcut>
<menu submenu="My submenu"/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources locale="en es ja">
<j2se version="1.6+" initial-heap-size="128m" max-heap-size="384m" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="myjar.jar" main="true" download="lazy" part="core" size="4189501"/>
<jar href="lib/commons-lang-2.6.jar" download="lazy" part="commons" size="297085"/>
...
<jar href="lib/trident-6.0.jar" download="lazy" part="core" size="114496"/>
<property name="jnlp.myProperty" value="http://mylocation.mycom.com/jnlp/myapp/MyApp.properties"/>
<property name="log4j.configuration" value="http://mylocation.mycom.com/jnlp/myapp/log4j.xml"/>
</resources>
<application-desc main-class="com.mycom.myapp.MyClass">
</application-desc>
</jnlp>
Hinweis, dass ich die Wildcard (*
) für:
- Das codebase-Attribut im Tag jnlp
- Das Attribut href im Tag jnlp
- Inhalt innerhalb Titel-Tags
- Attribut Größe in jar Tag
- der Wert der beiden Eigenschaften
ich die Vorlage in den entsprechenden JNLP-INF
Ordner speichern (mit dem entsprechenden benennen Sie auch) und wir unterzeichneten die JAR danach. Wir erhalten jedoch immer eine JNLPSigningException
mit der folgenden Meldung:
Fehler beim Überprüfen der Signierung der Startdatei. Die signierte Version stimmt nicht mit der heruntergeladenen Version überein.
Hat jemand eine Idee von dem, was ich vermisse?
Für diejenigen, die suchen, scheint es, dass ein Platzhalter im Eigenschaftswert nicht unterstützt wird, selbst mit dem jnlp. Präfix. Ich bin mir nicht sicher, wie Oracle es Entwicklern ermöglichen möchte, der Anwendung einen dynamischen Parameter sicher zu übergeben. Es macht mich verrückt! https://bugs.openjdk.java.net/browse/JDK-8042664 – JeffG