Problème de classpath avec un fichier Jar [Java] - Java - Programmation
Marsh Posté le 14-09-2003 à 08:55:11
Krueger a écrit : Bonsoir,
|
2 choses
1.
dans un jar tu dois avoir tes packages dans la racine et un répertoire Meta-inf dans lequel tu as (entre autres) un fichier Manifest.mf
Ce qui veut dire que dans ton cas classes serait le package de ta classe Hello. Donc ton jar est mal construit Hello.class devrait se trouver dans le root de ton jar et pas besoin du tag Class-Path: dans ton manifest
2.
Le tag Class-Path dans un jar est utilisé pour donner accès à des classes ou des jars externes au jar concerné. Exemple, j'ai un jar monprojet.jar qui a besoin des librairies mail.jar activation.jar -> dans son manifest
Code :
|
Marsh Posté le 14-09-2003 à 10:48:16
donne plutot la structure de ton jar et la ligne de commande que tu tapes pour le lancer C'est dans un de ces 2 trucs qu'il y a le problème
Marsh Posté le 14-09-2003 à 12:16:56
ozark74 a écrit : 1. |
Le vrai fichier Jar que je souhaitais générer est une application contenant entre autres des ressources et des librairies. Alors j'avais jugé logique d'organiser un peu le tout, par exemple :
- les classes dans classes
- les librairies (Jar) dans lib
- les données dans data
Néanmoins j'ignore s'il y a une convention ou autre recommendation quant à leur localisation.
ozark74 a écrit : 2.
|
Ça ne marche pas pour les classes qui ne sont pas dans un Jar avant archivage (dans mon cas la classe Hello) ?
benou a écrit : donne plutot la structure de ton jar et la ligne de commande que tu tapes pour le lancer C'est dans un de ces 2 trucs qu'il y a le problème |
Mon Jar contient les deux fichiers que j'avais cité ci-dessus dans l'arborescence indiquée. Pour lancer mon Jar, j'utilise simplement java -jar my_jar.jar.
Marsh Posté le 14-09-2003 à 12:31:19
Bon, j'avais créé mon Jar en le zippant au début. Maintenant, si je le crée avec l'utilitaire jar, j'ai toujours la même erreur :
Citation : F:\Data\Java\jar>jar cvfm my_jar.jar META-INF\MANIFEST.MF classes |
L'arborescence du Jar est identique et le contenu de son Manifest est le suivant :
Citation : Manifest-Version: 1.0 |
Marsh Posté le 14-09-2003 à 19:44:09
Krueger a écrit : Le vrai fichier Jar que je souhaitais générer est une application contenant entre autres des ressources et des librairies. Alors j'avais jugé logique d'organiser un peu le tout, par exemple : |
ben ca marche pas comme ca un jar.
un jar ca contient que des classes (et éventuellement des fichiers de données) et elles doivent se trouver à la racine.
Tu peux pas inclure d'autres jar dans ton jar
Marsh Posté le 14-09-2003 à 20:30:31
benou a écrit : |
Benou à raison. Ce que tu cherches c'est pas un ear par hasard?
Marsh Posté le 14-09-2003 à 21:55:56
Non, non. C'était bien un jar. Alors je vais suivre vos recommandations. Après tout, j'ai fait quelques tests et il me semble bien que l'attribut Class-Path du Manifest ne prenne en compte rien d'autre que des jars. Merci encore.
benou a écrit : Tu peux pas inclure d'autres jar dans ton jar |
Que veux-tu dire par là ? Je viens de faire un jar qui contient d'autres jars et j'ai réussi à les utiliser.
Marsh Posté le 14-09-2003 à 23:06:37
Krueger a écrit : |
???
que veux tu dire par les utiliser ??? Les classes inclues dans ton jar arrivaient à se servir des jar inclus dans ton jar ?
Marsh Posté le 15-09-2003 à 09:05:51
Krueger a écrit : Non, non. C'était bien un jar. Alors je vais suivre vos recommandations. Après tout, j'ai fait quelques tests et il me semble bien que l'attribut Class-Path du Manifest ne prenne en compte rien d'autre que des jars. Merci encore. |
tu viens de faire un jar qui référence d'autre jar externe via le manifest et là ca a marché, nuance
Marsh Posté le 15-09-2003 à 09:27:23
DarkLord a écrit : |
Ce sont bien des Jars internes à ma propre archive Jar.
Marsh Posté le 15-09-2003 à 09:32:54
Krueger a écrit : |
Marsh Posté le 15-09-2003 à 10:42:01
Le Jar que j'ai testé contient les fichiers suivants :
Citation : |
Classe Hello :
Code :
|
Fichier Manifest :
Citation : Manifest-Version: 1.0 |
Résultat de l'exécution :
Citation : E:\login\java\jar>java -jar my_jar.jar |
Donc... ça marche ! Alors pourquoi un ? Ou alors j'ai mal compris ce qu'on voulait me dire.
Marsh Posté le 15-09-2003 à 10:52:30
bin c'est ce que je dis t'as foutu un classpath spécifique dans ton manifest
mettre un jar dans un autre jar comme ca ne marche pas
Marsh Posté le 15-09-2003 à 11:02:59
Pourquoi je ne devrais pas mettre un Classpath spécifique dans mon jar ? C'est pour une application intégrée dans un Jar, alors ça serait un peu le bordel si le client devait gérer plusieurs Jars. Remarque qu'il me suffirait en fait de décompresser les Jars intégrés avant de les réintégrer.
Sinon, j'ai créé un Jar pour mon application et en effet, le chargement d'une classe dans un Jar plante. Pourtant ça avait marché pour my_jar.jar.
edit et réponse : Je me trouvais dans le répertoire où j'ai créé l'archive, donc DMC.
Marsh Posté le 15-09-2003 à 11:13:13
Krueger a écrit : Remarque qu'il me suffirait en fait de décompresser les Jars intégrés avant de les réintégrer. |
sauf que certaines licenses interdisent ce genre de choses
Marsh Posté le 15-09-2003 à 11:26:22
DarkLord a écrit : bin c'est ce que je dis t'as foutu un classpath spécifique dans ton manifest |
tu savais que ca pouvait marcher ce truc ? mettre un jar dans le un jar et l'indiquer dans le classpath du manifest ???
ca métonne ce truc
Marsh Posté le 15-09-2003 à 11:33:58
benou a écrit : |
Disons que dans un EAR par exemple c'est tout à fait possible. Or un ear c'est jamais qu'un JAR avec une extension .ear
Euh ...
ah bin non rien à voir parce que c'est comme ca
monapp.ear
- lib
toto.jar
tutu.jar
et dans tutu.jar j'ai
Classpath: lib/toto.jar
et là ca marche mais dans le jar lui meme, non ca m'étonne
Marsh Posté le 15-09-2003 à 11:41:45
DarkLord a écrit : |
pareil
Marsh Posté le 15-09-2003 à 12:20:32
ReplyMarsh Posté le 15-09-2003 à 12:52:43
DarkLord a écrit : |
Non non, il n'y a plus à s'étonner. Relisez mon DMC. Il y avait un répertoire lib de là où j'avais lancé mon Jar, alors forcément ça a été un peu facile du coup.
Marsh Posté le 15-09-2003 à 12:55:15
DarkLord a écrit : |
J'y pensais justement. Y a-t-il modification des binaires dès qu'on déJarre une archive ?
Marsh Posté le 15-09-2003 à 14:03:06
Krueger a écrit : |
je me disais aussi
Marsh Posté le 15-09-2003 à 15:16:27
Krueger a écrit : |
Le Jar que j'ai testé contient les fichiers suivants :
Citation : |
Marsh Posté le 15-09-2003 à 15:24:16
Je parlais du répertoire lib avant création de l'archive.
Marsh Posté le 15-09-2003 à 15:32:03
ah bin bravo
Marsh Posté le 14-09-2003 à 00:21:02
Bonsoir,
Je ne parviens pas à utiliser correctement l'attribut Class-Path du fichier Manifest d'un Jar.
Dans ce Jar, j'ai deux fichiers :
classes/Hello.class
META-INF/MANIFEST.MF
La classe Hello affiche le classique Hello World, tandis que le fichier Manifest contient les lignes suivantes :
Manifest-Version: 1.0
Main-Class: Hello
Class-Path: classes
J'ai une exception java.lang.NoClassDefFoundError en tentant d'utiliser ce Jar. Où est le problème ?!
Mon environnement dans le cas où :
Windows XP
Java SDK 1.4.1
Message édité par Krueger le 14-09-2003 à 00:26:39
---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi