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 :

Lecture du manifest d'un jar dépendant.


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Par défaut Lecture du manifest d'un jar dépendant.
    Bonjour à tous.
    Je suis actuellement confronté à un problème que je ne parviens pas à résoudre et j'espère que vous pourrez m'aider.
    J'explique :
    J'ai un jar "outils" qui contient un certain nombre de classes utilitaires me permettant de créer des "bundles" de données à injecter dans un système d'information.
    Afin de d'assurer la compatibilité de ces bundles, je veux stocker à l'intérieur la version du jar ayant servi à les créer.
    J'ai donc tout naturellement, dans la méthode permettant la création de bundle, écrit un code de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            final InputStream stream = this.getClass().getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF"); //$NON-NLS-1$
            final Manifest man = new Manifest(stream);
    Mon gros problème c'est qu'en faisant cela, je ne récupère pas le manifest du jar dans lequel je suis, mais celui du jar principal (exécutable) ayant appelé ma classe.

    Quelqu'un a-t'il une idée pour forcer la lecture du manifest du jar qui contient la classe dans laquelle j'écris le code ?

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    Bonjour,

    Pourquoi passer par le ClassLoader ?
    J'irai plutôt chercher la ressource directement dans le jar.

  3. #3
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    j'ai jamais essayé mais je me retournerai vers la classe Package en ayant des informations de version dans le manifeste du jar cible.
    On devrait pouvoir utiliser ce mécanisme pour récupérer des infos de version.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Par défaut
    Merci à vous pour vos réponses.
    Citation Envoyé par Jimmy_ Voir le message
    Bonjour,

    Pourquoi passer par le ClassLoader ?
    J'irai plutôt chercher la ressource directement dans le jar.
    C'est justement ce que je n'arrive pas à faire.
    Typiquement, mon jar peut être utilisé dans plusieurs applications différentes, je ne peux donc pas y accéder par un chemin absolu sur le disque vu que le path du ficher "*.jar" sera différent selon les applis.

    Citation Envoyé par professeur shadoko Voir le message
    j'ai jamais essayé mais je me retournerai vers la classe Package en ayant des informations de version dans le manifeste du jar cible.
    On devrait pouvoir utiliser ce mécanisme pour récupérer des infos de version.
    C'était une bonne idée, malheureusement, bien que mon jar possède un manifest, ces informations ne sont pas contenues dans les objets Package du jar.

    Voici le Manifest du jar en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Manifest-Version: 1.0
    Ant-Version: Apache Ant 1.8.0
    Created-By: 1.5.0_22-b03 (Sun Microsystems Inc.)
     
    Name: DataLoad
    Specification-Title: DataLoad
    Specification-Version: 2.2.3.2
    Implementation-Date: 09/29/2010 03:50 PM
    C'est l'attribut "Specification-Version" que je veux récupérer.

    un bout de code pour tester la solution proposée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (Package p :Package.getPackages()) {
        if (p.getName().startsWith("com.xxx.dataload")) {
            System.out.println(p.getName()+" impl :" + p.getImplementationVersion() + " spec :" +p.getSpecificationVersion());
        }
    }
    et la sortie correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    com.xxx.dataload impl :null spec :null
    com.xxx.dataload.log.listeneretl impl :null spec :null
    com.xxx.dataload.log impl :null spec :null
    com.xxx.dataload.exception impl :null spec :null
    com.xxx.dataload.utils impl :null spec :null
    com.xxx.dataload.job impl :null spec :null
    com.xxx.dataload.threads impl :null spec :null
    com.xxx.dataload.model.excel.headers impl :null spec :null
    com.xxx.dataload.model.bundle impl :null spec :null
    com.xxx.dataload.model.excel.impl impl :null spec :null
    com.xxx.dataload.model.excel impl :null spec :null
    A moins que certaines options de compilation soient nécessaires dans mon jar pour écrire ces informations dans les packages à la compil ...

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Février 2010
    Messages
    766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 766
    Par défaut
    Dans ce cas le manifest ne convient pas. Il te faut nom unique ou une classe particulière qui porte ta version. Il suffirait alors de la chercher dans le classpath.

  6. #6
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    je ne comprends pas pourquoi dans ton cas: name=Dataload et ensuite tu cherches les packages com.xxx.dataload .... C'est quoi l'idée derrière?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/10/2010, 11h58
  2. manifest d'un jar
    Par feridferid dans le forum Général Java
    Réponses: 1
    Dernier message: 30/01/2009, 09h23
  3. [débutant] Edition du manifest dans le .jar
    Par onzeaout dans le forum Langage
    Réponses: 9
    Dernier message: 09/10/2007, 17h23
  4. Réponses: 7
    Dernier message: 31/07/2007, 15h29
  5. [JAR]Fichier manifest dans un jar
    Par nicoo dans le forum Général Java
    Réponses: 2
    Dernier message: 10/03/2005, 08h51

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