OVH Cloud OVH Cloud

Intégrer un package dans un jar

3 réponses
Avatar
plutonheaven
Bonjour =E0 tous,

je suis autodidacte en Java, ce qui fait que je me pose parfois des
questions qui pourraient sembler toutes simples, mais bon, je compte
sur votre compr=E9hension :-)

J'ai =E9crit un programme fen=EAtr=E9 dans une classe. J'aimerai cr=E9er un
.jar, de fa=E7on =E0 ce qu'on puisse lancer le programme sur d'autres
ordinateurs en double-cliquant sur le .jar.

Or, mon programme utilise le package jdom, pour faire du parsage xml.

Sur mon mac, o=F9 j'ai =E9crit le programme et o=F9 j'ai donc install=E9
jdom, tout marche. Par contre, sur un autre pc, =E7a ne marche pas.

Ma question est : est-il possible d'int=E9grer le package jdom dans mon
jar, de fa=E7on =E0 ce qu'un utilisateur n'ait pas =E0 installer jdom pour
lancer mon appli ? Si oui, comment fait-on ?

Merci d'avance,

Paul

3 réponses

Avatar
Dam
Tu peux :
- mettre la librairie jdom à coté de ton jar à toi et mettre dans
ton manifest class-path: jdom.jar
- dézipper le jar jdom dans ton jar à toi
- utiliser un outil du genre fatjar pour intéger ton jar jdom dans ton
jar

Voilà!



Bonjour à tous,

je suis autodidacte en Java, ce qui fait que je me pose parfois des
questions qui pourraient sembler toutes simples, mais bon, je compte
sur votre compréhension :-)

J'ai écrit un programme fenêtré dans une classe. J'aimerai créer un
.jar, de façon à ce qu'on puisse lancer le programme sur d'autres
ordinateurs en double-cliquant sur le .jar.

Or, mon programme utilise le package jdom, pour faire du parsage xml.

Sur mon mac, où j'ai écrit le programme et où j'ai donc installé
jdom, tout marche. Par contre, sur un autre pc, ça ne marche pas.

Ma question est : est-il possible d'intégrer le package jdom dans mon
jar, de façon à ce qu'un utilisateur n'ait pas à installer jdom pour
lancer mon appli ? Si oui, comment fait-on ?

Merci d'avance,

Paul


Avatar
plutonheaven
Merci Dam, mais je ne comprends pas vraiment tes réponses, sans doute
à cause de mon manque de formation en informatique... Va falloir tout
m'expliquer en détails... :-)

- mettre la librairie jdom à coté de ton jar à toi et mettre dans
ton manifest class-path: jdom.jar


Qu'est-ce que la librairie jdom : jdom.jar seulement ou un dossier avec
d'autres fichiers ?
Je ne comprends pas que tu veux dire par "mettre à côté de ton jar".
Est-ce que c'est ajouter au projet avant de le transformer en jar ?
En ce qui concerne le classpath, je crois avoir compris à quoi ça
servait, mais je ne sais pas comment on le modifie. Est-ce que c'est
une variable qu'on définit pour le jar ? Est-ce que le chemin sera
valable sur d'autres ordinateurs ou est-ce qu'il ne convient qu'à un
ordi/compte ?

- dézipper le jar jdom dans ton jar à toi


Comment dézippe-t-on un jar ?
Pareil qu'au dessus, qu'est-ce que tu entends par "dans ton jar". C'est
ajouter à mon projet avant de créer le jar ?

- utiliser un outil du genre fatjar pour intéger ton jar jdom dans ton
jar


Je pense que vu mon niveau, il vaut mieux que je fasse le nécessaire
à la main, histoire que je comprenne vraiment ce qui se passe.
J'utiliserai des outils lorsque j'écrirai des application à la
chaîne ^^


En tous cas, merci de m'avoir répondu.

Avatar
Dam

Merci Dam, mais je ne comprends pas vraiment tes réponses, sans doute
à cause de mon manque de formation en informatique... Va falloir tout
m'expliquer en détails... :-)

- mettre la librairie jdom à coté de ton jar à toi et mettre dans
ton manifest class-path: jdom.jar


Qu'est-ce que la librairie jdom : jdom.jar seulement ou un dossier avec
d'autres fichiers ?


Non ce n'est que le fichier jdom.jar. C'est la librairie te permettant
d'utiliser les fonctionnalités jdom dans d'autres projets.

Je ne comprends pas que tu veux dire par "mettre à côté de ton jar".


Ce que j'entends par mettre à coté, c'est heuuu... mettre à coté
quoi! Disons que tu créé ton fichier jar normalement (sans librairie
jdom) mais en spécifiant dans ton fichier META-INF/MANIFEST.MF
Class-Path: jdom.jar. Ainsi si tu as à coté de ton fichier .jar
jdom.jar, c'est BINGO.

Est-ce que c'est ajouter au projet avant de le transformer en jar ?


Pour la compilation surement !

En ce qui concerne le classpath, je crois avoir compris à quoi ça
servait, mais je ne sais pas comment on le modifie. Est-ce que c'est
une variable qu'on définit pour le jar ? Est-ce que le chemin sera
valable sur d'autres ordinateurs ou est-ce qu'il ne convient qu'à un
ordi/compte ?


C'est ton fichier MANIFEST qui définit ça... il est directement
présent dans ton fichier .jar. Regarde comment créé un fichier jar
avec un fichier MANIFEST particulier (jar -h?).


- dézipper le jar jdom dans ton jar à toi


Comment dézippe-t-on un jar ?


Un fichier jar, n'est rien d'autre d'un fichier zip. Change l'extension
en zip tu verras...

Pareil qu'au dessus, qu'est-ce que tu entends par "dans ton jar". C'est
ajouter à mon projet avant de créer le jar ?


Tu peux effectivement dézipper jdom.jar dans ton arborscence projet.
Cela te permettra d'accéder aux class jdom sans problème (meme si
c'est très crade).


- utiliser un outil du genre fatjar pour intéger ton jar jdom dans ton
jar



Il exite un plugin fatjar pour Eclipse permettant facilement de faire
tout ça, mais je sais pas quel IDE tu utilises. Moi perso, j'utilise
plutot la 1ere solution...


Je pense que vu mon niveau, il vaut mieux que je fasse le nécessaire
à la main, histoire que je comprenne vraiment ce qui se passe.
J'utiliserai des outils lorsque j'écrirai des application à la
chaîne ^^


En tous cas, merci de m'avoir répondu.


Pour en revenir à cette 1ere solution... Imaginons que tu travailles
sans IDE (ça m'arrive) et c'est plus facile pour comprendre ce qui se
passe.

Imaginons que tu as l'arborescence projet suivante :
org/company/fr/fichier.java
org/company/fr/projet.java
dans le package org.company.fr. Imaginons que ton projet utilise jdom
pour fonctionner.
Pour compiler tu feras donc :
javac -cp "jdom.jar:." org/company/fr/*.java

Pour créér ton fichier jar, créé d'abord un fichier MANIFEST.MF
contenant par exemple :
Manifest-Version: 1.0
Class-Path: jdom.jar
Main-Class: org.company.fr.projet

puis ton fichier jar par :
jar -cfv projet.jar -m MANIFEST.MF org/company/fr/*.class

Tu pourras exécuter directement ton projet par :
java -jar projet.jar
à la condition que jdom.jar soit bien à coté de projet.jar

Si ton environnement d'exécution est Windows et si paramètre
d'exécution des fichiers jar tu as "javaw.exe -jar %1" (peut-être par
défaut) tu pourras exécuter ton projet directement en double cliquant
sur ton fichier projet.jar!

Voilà, j'espère t'avoir aidé...