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] Récupérer les données d'un MANIFEST: lire le MANIFEST


Sujet :

Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut [JAR] Récupérer les données d'un MANIFEST: lire le MANIFEST
    Salut!!

    Je fais un ptit programme qui doit permettre de connaître la version d'implémentation ou de spécification d'un jar...
    Le principe est le suivant:
    a partir du chemin complet d'un jar, mon programme lit le manifest et retourne la version d'implémentation ou de spécification (selon demande) inscrite dans le manifest si précisée.

    J'arrive très bien a le faire avec un MANIFEST simple de type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Specification-Vendor: Sun Microsystems, Inc.
    Implementation-Vendor: Sun Microsystems, Inc.
    Specification-Version: 1.2
    Implementation-Version: Tue Jun 27 00:22:48 PDT 2000 3594461704 40
    Implementation-Title: com.sun.jndi.fscontext
    Mais avec un MANIFEST du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Manifest-Version: 1.0
    Created-By: 1.2 (Sun Microsystems Inc.)
     
    Name: com/sun/jndi/toolkit/ctx/
    Specification-Title: JNDI Service Provider Utilities
    Specification-Vendor: Sun Microsystems, Inc.
    Implementation-Vendor: Sun Microsystems, Inc.
    Specification-Version: 1.2
    Implementation-Version: Tue Jun 27 00:10:34 PDT 2000 3594461704 40
    Implementation-Title: com.sun.jndi.toolkit.ctx
     
    Name: com/sun/jndi/url/jndi/
    Specification-Title: JNDI Service Provider Utilities
    Implementation-Version: Tue Jun 27 00:10:34 PDT 2000 3594461704 40
    Specification-Vendor: Sun Microsystems, Inc.
    Specification-Version: 1.2
    Implementation-Title: com.sun.jndi.url.jndi
    Implementation-Vendor: Sun Microsystems, Inc.
     
    Name: com/sun/jndi/toolkit/chars/
    Specification-Title: JNDI Service Provider Utilities
    Implementation-Version: Tue Jun 27 00:10:34 PDT 2000 3594461704 40
    Specification-Vendor: Sun Microsystems, Inc.
    Specification-Version: 1.2
    Implementation-Title: com.sun.jndi.toolkit.chars
    Implementation-Vendor: Sun Microsystems, Inc.
    Je n'y arrive pas... Je ne sais pas comment gérer ce type de main, je ne sais pas comment gérer le Name... dans ce cas j'aimerai pouvoir récupérer les version pour chaque section...
    Quelqu'un sait-il comment faire?

    Merci merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    As-tu consacré assez de temps à l'étude de la structure du fichier MANIFEST?

    Il ne me semble pas trop compliqué:

    une entrée par ligne
    chaque ligne a un couple (nom entrée - valeur) séparé par :
    plusieurs lignes forment une section

    les sections sont séparées par une ligne vide

    Bon courage
    Fabio
    Bien le bonjour chez vous
    Jowo

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Oui merci, je sais bien mais comment faire pour gérer les entrées section apr section je ne comprends pas...
    quand je fais un getMainAttributes avec un manifest qui contient plusieurs section je ne récupère que les valeurs des Name:.
    Si tu as un exemple, je suis preneuse, car je ne comprends vraiment pas comment je dois faire.

    merci de ton aide

  4. #4
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Un exemple d'utilisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    	public static void main(String[] args) throws ParseException {
    		try {
    			JarFile jarFile = new JarFile("C:\\ArgoUML_0.19.3\\argouml.jar");
    			Manifest manifest = jarFile.getManifest();
    			System.out.println("Main Attributes");
    			Attributes mainAttributes = manifest.getMainAttributes();
    			for (Iterator i = mainAttributes.keySet().iterator(); i.hasNext();) {
    				Attributes.Name name = (Attributes.Name)i.next();
    				System.out.println("    " + name + ": " + mainAttributes.getValue(name));
    			}
    			System.out.println();
    			System.out.println("Entries");
    			Map entries = manifest.getEntries();
    			for (Iterator j = entries.keySet().iterator(); j.hasNext();) {
    				String entry = (String)j.next();
    				System.out.println(" >" + entry);
    				Attributes attributes = manifest.getAttributes(entry);
    				for (Iterator k = attributes.keySet().iterator(); k.hasNext();) {
    					Attributes.Name name = (Attributes.Name)k.next();
    					System.out.println("    " + name + ": " + attributes.getValue(name));
    				}				
    			}
    			jarFile.close();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    Bien le bonjour chez vous
    Jowo

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 124
    Points : 48
    Points
    48
    Par défaut
    Ok merci c'est super merci!!

    Je n'avais pas compris qu'on pouvait récupérer les "attributs" d'un entries... par section quoi! bref bref merci beaucoup de ton aide, je vais tester tout ca tout de suite!

    encore merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Points : 5
    Points
    5
    Par défaut Salut
    Merci pour ce code. Apres 2 jours de galère, cela m'a bien avancé.

    Encore Merci

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

Discussions similaires

  1. Génération de script SQL avec les données
    Par borgfabr dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/03/2004, 13h57
  2. Réponses: 4
    Dernier message: 04/12/2003, 08h12
  3. Réponses: 13
    Dernier message: 14/10/2003, 14h31
  4. Réponses: 4
    Dernier message: 18/08/2003, 09h53
  5. trier les données dans le cache ??
    Par psyco2604 dans le forum XSL/XSLT/XPATH
    Réponses: 31
    Dernier message: 10/06/2003, 10h03

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