web-dev-qa-db-fra.com

Comment corriger «l'attribut manifeste de base de code, d'autorisations et de nom d'application» manquant dans mon application JNLP?

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?

29
ryvantage

(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 .jars. 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 .jars 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.

41
ryvantage

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>
9
Atul Soman

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:

  1. Début control panel

  2. Choisissez Java Control Panel

  3. Sélectionnez l'onglet Security

  4. À Exception Site list cliquer sur Edit Site List bouton

  5. Cliquez sur le bouton Add.

  6. Tapez la racine du serveur (par exemple: - https://ibank.cib.h ), et appuyez sur OK

  7. Redémarrez votre navigateur/application.

Ressource ici.

3
user669677

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

Si vous utilisez Netbeans, définissez ces attributs dans votre fichier nbproject/project.properties:

  • manifest.custom.codebase
  • manifest.custom.permissions
  • manifest.application.name.attribute

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.

2
gouessej