IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Jar] Problème de Manifest


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Jar] Problème de Manifest
    Bonjour à tous
    Je suis un tout nouveau posteur, donc j'espère que je me trompe pas en postant ici... J'ai beaucoup cherché mais n'ai pas trouvé de sujet traitant de ce problème.
    Voilà mon problème.
    J'ai besoin dans un programme en java de créer un fichier jar exécutable. Pour ce faire, après avoir tenté plusieurs choses inutiles je suis tombé sur les classes JarFile, JarInputStream et JarOutputStream.
    Je crée donc un JarFile et si j'essaie ensuite de lui ajouter ensuite le Manifest comme un autre fichier, je recois un message d'erreur me disant que le fichier est corrompu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Invalid or corrupt jarfile
    J'ai donc envie d'utiliser le constructeur de JarOutputFile permettant de lui passer en paramètre le manifest avec la classe Manifest.
    Je crée donc un manifest en passant au constructeur un FileInputStream qui lit dans le modèle de manifest que je veux recopier. Le jar se crée comme il faut, je n'ai plus le message d'erreur dû à une corruption éventuelle de fichier mais il me dit qu'il n'arrive pas à trouver la méthode main. Un petit tour dans l'archive me montre que le MANIFEST.MF est vide.
    Je sèche vraiment.
    J'ai essayé de remplir le manifest après sa création en utilisant la méthode read associée, ca me fait deux lignes vides à la place.
    Si quelqu'un voit de quoi il peut s'agir, son aide est la bienvenue, aprce que la doc est très (très) obscure sur ces classes relatives Au JarFile...

  2. #2
    Invité
    Invité(e)
    Par défaut
    On dirait que je ne suis pas le seul à ne pas être inspiré pour trouver la solution. Si ca se trouve je pars dans une mauvaise direction, je sais pas, et je trouve rien qui puisse m'aider sur le net.
    Voilà alors merci par avance à la personne qui pourra m'aider, je continue mes recherches et vous tiens au courant...

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faudrait voir ton code...
    JarOutputStream permet bien de créer des fichiers Jar... donc c'est que tu dois surement oublier quelque chose...

    a++

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pas de problème voilà la partie de code incriminée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    OutputStream jarOut;
    try {
    	jarOut = new FileOutputStream(name);
    	InputStream manStream = new FileInputStream("resources/META-INF/MANIFEST.MF");
    	Manifest man = new Manifest(manStream);
    	jarStream = new JarOutputStream(jarOut,man);
    } catch (FileNotFoundException e) {
    	e.printStackTrace();
    }
    de plus mon fichier resources/META-INF/MANIFEST.MF contient ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Manifest-Version: 1.0
    Main-Class: JavaInstaller
    (sans oublier la dernière ligne vide, merci les forums de dvp.com...)
    De plus pour voir si le flux que j'ouvre sur le fichier de manifest n'est pas mauvais j'ai récupéré dans une chaîne ce qu'il lisait dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String line;
    String s ="";
    BufferedReader br = new BufferedReader(new InputStreamReader(manStream)); 
    while((line = br.readLine()) != null){
    	s += "\n"+line;
    }
    System.out.println(s);
    et dans s il y a ce que je veux.
    Je me dis donc que j'ai dû passer à côté de quelque chose car le manifest créé est vide totalement...
    Voilà.
    J'espère ne pas avoir commis une énormité...

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Tu peux également créer dynamiquement ton Manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            Manifest manifest = new Manifest();
            manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
            manifest.getMainAttributes().put(Attributes.Name.MAIN_CLASS, "JavaInstaller");

    Sinon d'après ton code je pense que le problème vient du fait que tu ne ferme pas proprement tous tes flux ???? Tu devrais adopter un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            FileOutputStream fos = new FileOutputStream("out.jar.zip");
            try {
                JarOutputStream jos = new JarOutputStream(fos, manifest);
                try {
     
                    // Traitement sur 'jos' ici
     
                } finally {
                    jos.close();
                }
            } finally {
                fos.close();
            }
    Plus d'info : http://www.developpez.net/forums/sho...4&postcount=69

    a++

  6. #6
    Invité
    Invité(e)
    Par défaut
    Et voilà tu es très fort tu as mis le doigts exactement là où il fallait adiGuba, sur les énormités dont je parlais... Oublier de fermer les flux . Ne fermant pas mon stream pour créer le manifest, il n'écrivait pas tout..
    Donc un grand merci à toi je vais pouvoir continuer mon appli..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JAR problème avec le MANIFEST.MF
    Par Sankasssss dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 10/07/2008, 20h22
  2. Réponses: 15
    Dernier message: 31/08/2006, 16h28
  3. [Jar] problème de création et de lancement
    Par beudot07 dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 14/09/2005, 14h56
  4. [ jar ] Problème de ClassPath
    Par remyli dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 11/07/2005, 14h07
  5. [JAR]Problème utilisation manifest et jar
    Par doudine dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 07/01/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo