Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Version d'un Jar

4 réponses
Avatar
EJL
Bonjour à tous,

J'aimerais indiquer une version à un jar que je génère. Malgré mes
recherches et essais, je ne suis pas arrivé à le faire.

Quelqu'un a-t-il une idée ?
Merci,

Elisabeth
Toulouse

Voici mes essais :
Génération du jar avec Ant (1.6.2)

<jar jarfile="MoiSoapClient.jar">
<manifest>
<attribute name="Built-By" value="Moi"/>
<attribute name="Implementation-Title" value="Essai"/>
<attribute name="Implementation-Vendor" value="Moi"/>
<attribute name="Implementation-Version" value="1.2"/>
<attribute name="Specification-Version" value="1.2"/>
</manifest>
<!-- <zipfileset src="${soap.jar}"/> -->
<fileset dir="${classes.dest.dir}" includes="*.class"/>
</jar>

ce qui génère un manifest :
Manifest-Version: 1.0
Built-By: Moi
Created-By: 1.4.1_03-b02 (Sun Microsystems Inc.)
Ant-Version: Apache Ant 1.6.2
Implementation-Title: Moi
Specification-Version: 1.2
Implementation-Version: 1.2
Implementation-Vendor: Moi

Name: moi/soap/SP_Systeme.class
SHA1-Digest: .....


Dans le code, j'utilise :
Package client=Package.getPackage("moi.soap.client");
System.out.println(" package="+client);
System.out.print(" Impl Version : "+client.getImplementationVersion());
System.out.println(" Spec Version : "+client.getSpecificationVersion());

mais le résultat est toujours "null" ...

4 réponses

Avatar
vc.spam
Bonjour Elisabeth,

Je n'ai pas de réponse, mais une piste. Tu trouve dans tous les
manifest du j2sdk un truc du genre de la ligne suivante comme seule
info de version:

Created-By: 1.5.0 (Sun Microsystems Inc.)

A mon avis, si la version apparait là, ça n'est pas un hasard...
D'autres on du connaitre le même problème que toi et se sont
débrouillé avec ça...

Même dans rt.jar, où il y a toutes les infos de version, la version
apparait dans le champ "Created-By"...

...
Created-By: 1.5.0 (Sun Microsystems Inc.)
Implementation-Title: Java Runtime Environment
Specification-Vendor: Sun Microsystems, Inc.
Specification-Version: 1.4
Implementation-Version: 1.5.0
...

C'est peut-être un héritage du passé ou une connerie dans le
class-loader. Ou peut-être qu'il faut que tu étendes toi-même le
classLoader par défaut pour qu'il le fassee... Tu devrais peut-être
voir si ça fait pareil avec une un autre JRE... Et, surtout, tu
devrais faire le teste avec les packages contenus dans rt.jar...

Bon courage,

Vincent, Toulouse aussi :-)



EJL wrote in message news:...
Bonjour à tous,

J'aimerais indiquer une version à un jar que je génère. Malgré mes
recherches et essais, je ne suis pas arrivé à le faire.

Quelqu'un a-t-il une idée ?
Merci,

Elisabeth
Toulouse

Voici mes essais :
Génération du jar avec Ant (1.6.2)

<jar jarfile="MoiSoapClient.jar">
<manifest>
<attribute name="Built-By" value="Moi"/>
<attribute name="Implementation-Title" value="Essai"/>
<attribute name="Implementation-Vendor" value="Moi"/>
<attribute name="Implementation-Version" value="1.2"/>
<attribute name="Specification-Version" value="1.2"/>
</manifest>
<!-- <zipfileset src="${soap.jar}"/> -->
<fileset dir="${classes.dest.dir}" includes="*.class"/>
</jar>

ce qui génère un manifest :
Manifest-Version: 1.0
Built-By: Moi
Created-By: 1.4.1_03-b02 (Sun Microsystems Inc.)
Ant-Version: Apache Ant 1.6.2
Implementation-Title: Moi
Specification-Version: 1.2
Implementation-Version: 1.2
Implementation-Vendor: Moi

Name: moi/soap/SP_Systeme.class
SHA1-Digest: .....


Dans le code, j'utilise :
Package client=Package.getPackage("moi.soap.client");
System.out.println(" package="+client);
System.out.print(" Impl Version : "+client.getImplementationVersion());
System.out.println(" Spec Version : "+client.getSpecificationVersion());

mais le résultat est toujours "null" ...


Avatar
EJL
Bonjour,

Merci Vincent,

En fait, "Created-By" est rajouté automatiquement lors de la création du
Jar : "Created-By: 1.4.1_03-b02 (Sun Microsystems Inc.)
". Mais cela ne change rien.

Par contre, j'avais, avec succès, essayé de lire les versions d'autres
Jar et de comparer les Manifests pour transposer. J'arrivais bien dans
certains packages à lire la version ... Y-aurait-il un class loader
particulier pour cela ?

Sinon, j'envisage de créer une variable ou une classe statique qui
mémoriserai la version de mon Jar, faute de mieux ... (surtout que j'ai
déjà des jars dans la nature sans cette classe !!!!)

Elisabeth
Toulouse (du côté de Tournefeuille ...)


Vince44 wrote:

Bonjour Elisabeth,

Je n'ai pas de réponse, mais une piste. Tu trouve dans tous les
manifest du j2sdk un truc du genre de la ligne suivante comme seule
info de version:

Created-By: 1.5.0 (Sun Microsystems Inc.)

A mon avis, si la version apparait là, ça n'est pas un hasard...
D'autres on du connaitre le même problème que toi et se sont
débrouillé avec ça...

Même dans rt.jar, où il y a toutes les infos de version, la version
apparait dans le champ "Created-By"...

...
Created-By: 1.5.0 (Sun Microsystems Inc.)
Implementation-Title: Java Runtime Environment
Specification-Vendor: Sun Microsystems, Inc.
Specification-Version: 1.4
Implementation-Version: 1.5.0
...

C'est peut-être un héritage du passé ou une connerie dans le
class-loader. Ou peut-être qu'il faut que tu étendes toi-même le
classLoader par défaut pour qu'il le fassee... Tu devrais peut-être
voir si ça fait pareil avec une un autre JRE... Et, surtout, tu
devrais faire le teste avec les packages contenus dans rt.jar...

Bon courage,

Vincent, Toulouse aussi :-)



EJL wrote in message news:...

Bonjour à tous,

J'aimerais indiquer une version à un jar que je génère. Malgré mes
recherches et essais, je ne suis pas arrivé à le faire.

Quelqu'un a-t-il une idée ?
Merci,

Elisabeth
Toulouse

Voici mes essais :
Génération du jar avec Ant (1.6.2)

<jar jarfile="MoiSoapClient.jar">
<manifest>
<attribute name="Built-By" value="Moi"/>
<attribute name="Implementation-Title" value="Essai"/>
<attribute name="Implementation-Vendor" value="Moi"/>
<attribute name="Implementation-Version" value="1.2"/>
<attribute name="Specification-Version" value="1.2"/>
</manifest>
<!-- <zipfileset src="${soap.jar}"/> -->
<fileset dir="${classes.dest.dir}" includes="*.class"/>
</jar>

ce qui génère un manifest :
Manifest-Version: 1.0
Built-By: Moi
Created-By: 1.4.1_03-b02 (Sun Microsystems Inc.)
Ant-Version: Apache Ant 1.6.2
Implementation-Title: Moi
Specification-Version: 1.2
Implementation-Version: 1.2
Implementation-Vendor: Moi

Name: moi/soap/SP_Systeme.class
SHA1-Digest: .....


Dans le code, j'utilise :
Package client=Package.getPackage("moi.soap.client");
System.out.println(" package="+client);
System.out.print(" Impl Version : "+client.getImplementationVersion());
System.out.println(" Spec Version : "+client.getSpecificationVersion());

mais le résultat est toujours "null" ...





Avatar
Jacques Desmazieres
Sinon, j'envisage de créer une variable ou une classe statique qui
mémoriserai la version de mon Jar, faute de mieux ... (surtout que j'ai
déjà des jars dans la nature sans cette classe !!!!)
Si tu envisages cela, mais que tu veux que la version du jar soit

indépendante du code qu'il contient, tu peux essayer d'utiliser la notion de
services du format Jar. Ceci permet de définir des variables d'environnement
pour ton environnement d'exécution. Pour cela tu rajoutes dans ton jar un
fichier dans META-INF/services nommé comme ta variable d'environnement, et
tu mets dedans la valeur à affecter à la variable.
(pour exemple, regarde le contenu de jar de Xerces)

Cette méthode présente quand même une limite : si tu as plusieurs jars, et
que tu veux connaitre la version de chacun d'eux, tu dois créer autant de
variables d'environnement, avec des noms différents.

J'espère que cela te permettra d'avancer

Jacques Desmazieres

Avatar
vc.spam
Bonjour,

Tu as essayé de regarder dans les sources du JRE? Avec Netbeans tu
peux...

Si tu veux, tu peux m'envoyer un mail sur mon adresse ,
je te renverrais une adresse que j'utilise vraiment. Comme ça,
toujours si tu veux :-), tu pourras me faire passer un petit jar avec
son source qui reproduit le problème...

A+

Vincent



Par contre, j'avais, avec succès, essayé de lire les versions d'autres
Jar et de comparer les Manifests pour transposer. J'arrivais bien dans
certains packages à lire la version ... Y-aurait-il un class loader
particulier pour cela ?
Je n'ai rien vu dans la doc, et je suppose que tu avais déjà

vérifié...


Sinon, j'envisage de créer une variable ou une classe statique qui
mémoriserai la version de mon Jar, faute de mieux ... (surtout que j'ai
déjà des jars dans la nature sans cette classe !!!!)

Elisabeth
Toulouse (du côté de Tournefeuille ...)


Vince44 wrote:

Bonjour Elisabeth,

Je n'ai pas de réponse, mais une piste. Tu trouve dans tous les
manifest du j2sdk un truc du genre de la ligne suivante comme seule
info de version:

Created-By: 1.5.0 (Sun Microsystems Inc.)

A mon avis, si la version apparait là, ça n'est pas un hasard...
D'autres on du connaitre le même problème que toi et se sont
débrouillé avec ça...

Même dans rt.jar, où il y a toutes les infos de version, la version
apparait dans le champ "Created-By"...

...
Created-By: 1.5.0 (Sun Microsystems Inc.)
Implementation-Title: Java Runtime Environment
Specification-Vendor: Sun Microsystems, Inc.
Specification-Version: 1.4
Implementation-Version: 1.5.0
...

C'est peut-être un héritage du passé ou une connerie dans le
class-loader. Ou peut-être qu'il faut que tu étendes toi-même le
classLoader par défaut pour qu'il le fassee... Tu devrais peut-être
voir si ça fait pareil avec une un autre JRE... Et, surtout, tu
devrais faire le teste avec les packages contenus dans rt.jar...

Bon courage,

Vincent, Toulouse aussi :-)



EJL wrote in message news:...

Bonjour à tous,

J'aimerais indiquer une version à un jar que je génère. Malgré mes
recherches et essais, je ne suis pas arrivé à le faire.

Quelqu'un a-t-il une idée ?
Merci,

Elisabeth
Toulouse

Voici mes essais :
Génération du jar avec Ant (1.6.2)

<jar jarfile="MoiSoapClient.jar">
<manifest>
<attribute name="Built-By" value="Moi"/>
<attribute name="Implementation-Title" value="Essai"/>
<attribute name="Implementation-Vendor" value="Moi"/>
<attribute name="Implementation-Version" value="1.2"/>
<attribute name="Specification-Version" value="1.2"/>
</manifest>
<!-- <zipfileset src="${soap.jar}"/> -->
<fileset dir="${classes.dest.dir}" includes="*.class"/>
</jar>

ce qui génère un manifest :
Manifest-Version: 1.0
Built-By: Moi
Created-By: 1.4.1_03-b02 (Sun Microsystems Inc.)
Ant-Version: Apache Ant 1.6.2
Implementation-Title: Moi
Specification-Version: 1.2
Implementation-Version: 1.2
Implementation-Vendor: Moi

Name: moi/soap/SP_Systeme.class
SHA1-Digest: .....


Dans le code, j'utilise :
Package client=Package.getPackage("moi.soap.client");
System.out.println(" package="+client);
System.out.print(" Impl Version : "+client.getImplementationVersion());
System.out.println(" Spec Version : "+client.getSpecificationVersion());

mais le résultat est toujours "null" ...