Avec les récentes mises à jour Java Java, de nombreuses personnes ont des problèmes avec leurs applications Java Web Start ne disposant pas de Codebase
, Permissions
, et Application-name
attributs manifestes. Bien qu'il existe des ressources pour vous aider à accomplir cela, je n'ai trouvé aucune réponse complète à cette question, je pensais donc qu'un Q-and-A serait bien. Alors, voici la question:
Mon Java L'application Web Start affiche les avertissements suivants dans la console:
Missing Permissions manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Codebase manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Application-Name manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Comment puis-je résoudre ce problème?
(1) Tout d'abord, vous devez créer un fichier texte avec tous les attributs que vous souhaitez ajouter. Mon fichier texte ressemble à ceci:
Permissions: all-permissions
Codebase: http://www.codebase.com/myApp/dist
Application-Name: My Application
Je l'ai nommé addToManifest.txt
. De toute évidence, vous devrez modifier les paramètres pour répondre aux besoins de votre application.
(2) Ensuite, vous devez également l'ajouter au .jar principal et à toutes les bibliothèques. La commande pour ce faire est:
jar ufm dist\myApp.jar addToManifest.txt
bien sûr dist\myApp.jar
devra indiquer quel est votre .jar principal. Vous devrez également le faire pour toutes les bibliothèques.
jar ufm dist\lib\jcommon-1.0.16.jar addToManifest.txt
jar ufm dist\lib\jfreechart-1.0.13.jar addToManifest.txt
jar ufm dist\lib\joda-time-2.2.jar addToManifest.txt
...
(Remarque: sous Windows, j'ai écrit un .bat
fichier pour cela.)
Une fois que vous faites cela, les attributs doivent être écrits dans le .jar
s. Vous pouvez ouvrir les .jars dans un gestionnaire Zip (comme 7-Zip), extraire le MANIFEST.MF
fichier, ouvrez-le dans un éditeur de texte et vous devriez voir les attributs répertoriés.
(3) Après avoir ajouté les attributs, vous devez démissionner de votre application. La commande pour ce faire est:
jarsigner dist\myApp.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
Vous devrez également le faire pour toutes vos bibliothèques:
jarsigner dist\lib\jcommon-1.0.16.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
jarsigner dist\lib\jfreechart-1.0.13.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
jarsigner dist\lib\joda-time-2.2.jar -keystore "C:\myApp\KEYSTORE.ks" alias -storepass password
Après cela, vos attributs doivent être ajoutés et votre .jar
s doivent être signés!
REMARQUE: vous ne devez signer/déployer vos bibliothèques qu'une seule fois, sauf si vous modifiez la structure de la bibliothèque. Par exemple, si vous mettez à jour votre application mais que les manifestes ont déjà vu leurs manifestes modifiés, signés correctement et déployés, vous n'aurez pas besoin de démissionner/déployer les bibliothèques sauf si vous ajoutez/supprimez des bibliothèques de votre application.
REMARQUE # 2: La version actuelle de Netbeans ajoutera des attributs de manifeste Codebase
et Permissions
à votre .jar primaire uniquement , mais pas à vos bibliothèques. Si vous utilisez Netbeans, vous recevrez un avertissement de l'utilitaire jar
lorsque vous essayez d'ajouter un attribut de manifeste en double. Il y a un rapport de bogue dans la file d'attente pour avoir ce problème https://netbeans.org/bugzilla/show_bug.cgi?id=234231 .
EDIT: la dernière version de Netbeans (8.0) ajoute désormais les trois (Codebase
, Permissions
et Application-Name
) au manifeste pour vous.
Une autre façon pourrait être de le gérer dans votre script de construction lui-même.
Étape 1: définir une cible à mettre à jour
<target name="updateManifest">
<manifest file="${file}" mode="update">
<attribute name="Trusted-Only" value="true"/>
<attribute name="Permissions" value="all-permissions"/>
<attribute name="Codebase" value="*"/>
</manifest>
</target>
Étape 2: appelez la cible de mise à jour et utilisez le nouveau manifeste dans le bocal
<ant target="updateManifest">
<property name="file" location="manifest.use" />
</ant>
<jar jarfile="${jar_name}.jar" manifest="manifest.use">
<fileset dir="${dest}">
<include name="File1" />
</fileset>
</jar>
Si le message d'erreur ressemble à ceci:
Missing Application-Name manifest attribute for: server root/filename.jar
Vous pouvez le résoudre de cette façon:
Début control panel
Choisissez Java Control Panel
Sélectionnez l'onglet Security
À Exception Site list
cliquer sur Edit Site List
bouton
Cliquez sur le bouton Add
.
Tapez la racine du serveur (par exemple: - https://ibank.cib.h ), et appuyez sur OK
Redémarrez votre navigateur/application.
Exemple pour ajouter manifest
au pot et signer les pots.
<target name="-post-compile">
<jar destfile="${build.web.dir}/jars/app.jar" >
<fileset dir="${build.classes.dir}">
<include name="com/sample/test/client/**/*.*"/>
<include name="com/sample/test/share/**/*.*"/>
</fileset>
<manifest>
<attribute name="Author" value="${user.name}"/>
<attribute name="Permissions" value="all-permissions"/>
<attribute name="Codebase" value="http://localhost:8080/app/"/>
<attribute name="Application-Name" value="App"/>
</manifest>
</jar>
<signjar keystore="app.keystore" storepass="test" jar="${build.web.dir}/jars/app.jar" alias="Tomcat" />
<copyfiles files="${file.reference.javadatepicker.jar}" todir="${build.web.dir}/jars"/>
<delete dir="${build.web.dir}/WEB-INF/classes/com/sample/app/client"/>
<!--keytool -genkey -alias Tomcat -keystore app.keystore -keypass test -storepass test -validity 1960-->
<signjar keystore="app.keystore" storepass="test" jar="${build.web.dir}/jars/javadatepicker.jar" alias="Tomcat" />
</target>
Si vous utilisez Netbeans, définissez ces attributs dans votre fichier nbproject/project.properties:
Le tout dernier n'est pris en charge que par Netbeans> = 8.0 (voir ici ). Les autres devraient fonctionner même dans Netbeans 7.2. J'ai également défini jnlp.mixed.code sur trust_only, mais ce n'est peut-être pas approprié dans votre cas. Vous pouvez modifier votre fichier jnlp-impl.xml à vos risques et périls si vous ne pouvez pas passer à une version plus récente de Netbeans.
la suggestion de atulsm est meilleure si vous n'utilisez pas Netbeans.