Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
890 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Problème de classpath avec un fichier Jar

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Problème de classpath avec un fichier Jar

n°514194
Krueger
tout salaire demande dutravail
Posté le 14-09-2003 à 00:21:02  profilanswer
 

Bonsoir,
 
Je ne parviens pas à utiliser correctement l'attribut Class-Path du fichier Manifest d'un Jar.
Dans ce Jar, j'ai deux fichiers :

Citation :

classes/Hello.class
META-INF/MANIFEST.MF


 
La classe Hello affiche le classique Hello World, tandis que le fichier Manifest contient les lignes suivantes :

Citation :

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
mood
Publicité
Posté le 14-09-2003 à 00:21:02  profilanswer
 

n°514223
ozark74
Posté le 14-09-2003 à 08:55:11  profilanswer
 

Krueger a écrit :

Bonsoir,
 
Je ne parviens pas à utiliser correctement l'attribut Class-Path du fichier Manifest d'un Jar.
Dans ce Jar, j'ai deux fichiers :

Citation :

classes/Hello.class
META-INF/MANIFEST.MF


 
La classe Hello affiche le classique Hello World, tandis que le fichier Manifest contient les lignes suivantes :

Citation :

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 ?! :??:
 


 
 
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 :
  1. Class-Path: mail.jar activation.jar


 

n°514237
benou
Posté le 14-09-2003 à 10:48:16  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°514267
Krueger
tout salaire demande dutravail
Posté le 14-09-2003 à 12:16:56  profilanswer
 

ozark74 a écrit :

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


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.
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 :
  1. Class-Path: mail.jar activation.jar



Ç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.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514271
Krueger
tout salaire demande dutravail
Posté le 14-09-2003 à 12:31:19  profilanswer
 

Bon, j'avais créé mon Jar en le zippant au début. :whistle:  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
manifest ajouté
ajout : classes/(entrée = 0) (sortie = 0)(0% stocké)
ajout : classes/Hello.class(entrée = 417) (sortie = 286)(31% compressés)
ajout : classes/Hello.java(entrée = 120) (sortie = 104)(13% compressés)
 
F:\Data\Java\jar>java -jar my_jar.jar
Exception in thread "main" java.lang.NoClassDefFoundError: Hello


 
L'arborescence du Jar est identique et le contenu de son Manifest est le suivant :

Citation :

Manifest-Version: 1.0
Class-Path: classes
Created-By: 1.4.1_02 (Sun Microsystems Inc.)
Main-Class: Hello
 


Message édité par Krueger le 14-09-2003 à 12:49:53

---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514516
benou
Posté le 14-09-2003 à 19:44:09  profilanswer
 

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 :
- 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.


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


---------------
ma vie, mon oeuvre - HomePlayer
n°514547
darklord
You're welcome
Posté le 14-09-2003 à 20:30:31  profilanswer
 

benou a écrit :


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


 
Benou à raison. Ce que tu cherches c'est pas un ear par hasard?


---------------
Just because you feel good does not make you right
n°514598
Krueger
tout salaire demande dutravail
Posté le 14-09-2003 à 21:55:56  profilanswer
 

Non, non. C'était bien un jar. Alors je vais suivre vos recommandations. :jap: 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


:heink:
Que veux-tu dire par là ? Je viens de faire un jar qui contient d'autres jars et j'ai réussi à les utiliser. :??:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514644
benou
Posté le 14-09-2003 à 23:06:37  profilanswer
 

Krueger a écrit :


Que veux-tu dire par là ? Je viens de faire un jar qui contient d'autres jars et j'ai réussi à les utiliser. :??:


???
 
que veux tu dire par les utiliser ??? Les classes inclues dans ton jar arrivaient à se servir des jar inclus dans ton jar ?  :heink:


---------------
ma vie, mon oeuvre - HomePlayer
n°514711
darklord
You're welcome
Posté le 15-09-2003 à 09:05:51  profilanswer
 

Krueger a écrit :

Non, non. C'était bien un jar. Alors je vais suivre vos recommandations. :jap: 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.
 
 
:heink:
Que veux-tu dire par là ? Je viens de faire un jar qui contient d'autres jars et j'ai réussi à les utiliser. :??:


 
tu viens de faire un jar qui référence d'autre jar externe via le manifest et là ca a marché, nuance :o


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 15-09-2003 à 09:05:51  profilanswer
 

n°514720
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 09:27:23  profilanswer
 

DarkLord a écrit :


 
tu viens de faire un jar qui référence d'autre jar externe via le manifest et là ca a marché, nuance :o


 
:non:
Ce sont bien des Jars internes à ma propre archive Jar.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514723
darklord
You're welcome
Posté le 15-09-2003 à 09:32:54  profilanswer
 

Krueger a écrit :


 
:non:
Ce sont bien des Jars internes à ma propre archive Jar.


 
 :heink:


---------------
Just because you feel good does not make you right
n°514766
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 10:42:01  profilanswer
 


Le Jar que j'ai testé contient les fichiers suivants :

Citation :


Hello.class
lib/hsqldb.jar
lib/saxon.jar
WEB-INF/MANIFEST.MF


 
Classe Hello :

Code :
  1. public class Hello
  2. {
  3.   public static void main(String[] args) throws Exception
  4.   {
  5.     System.out.println("Hello world !" );
  6.     System.out.println(Class.forName("org.hsqldb.jdbcDriver" ));
  7.     System.out.println(Class.forName("com.icl.saxon.StyleSheet" ));
  8.   }
  9. }


 
Fichier Manifest :

Citation :

Manifest-Version: 1.0
Class-Path: . lib/hsqldb.jar lib/saxon.jar
Created-By: 1.4.1_03 (Sun Microsystems Inc.)
Main-Class: Hello
 


 
Résultat de l'exécution :

Citation :

E:\login\java\jar>java -jar my_jar.jar
Hello world !
class org.hsqldb.jdbcDriver
class com.icl.saxon.StyleSheet


 
Donc... ça marche ! Alors pourquoi un :heink: ? Ou alors j'ai mal compris ce qu'on voulait me dire. :/


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514768
darklord
You're welcome
Posté le 15-09-2003 à 10:52:30  profilanswer
 

bin c'est ce que je dis t'as foutu un classpath spécifique dans ton manifest :o
 
mettre un jar dans un autre jar comme ca ne marche pas :o


---------------
Just because you feel good does not make you right
n°514776
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 11:02:59  profilanswer
 

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. :sarcastic:
 
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. :D


Message édité par Krueger le 15-09-2003 à 11:12:36

---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514783
darklord
You're welcome
Posté le 15-09-2003 à 11:13:13  profilanswer
 

Krueger a écrit :

Remarque qu'il me suffirait en fait de décompresser les Jars intégrés avant de les réintégrer. :sarcastic:


 
sauf que certaines licenses interdisent ce genre de choses :sarcastic:


---------------
Just because you feel good does not make you right
n°514788
benou
Posté le 15-09-2003 à 11:26:22  profilanswer
 

DarkLord a écrit :

bin c'est ce que je dis t'as foutu un classpath spécifique dans ton manifest :o


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  :heink:


---------------
ma vie, mon oeuvre - HomePlayer
n°514794
darklord
You're welcome
Posté le 15-09-2003 à 11:33:58  profilanswer
 

benou a écrit :


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  :heink:  


 
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 ...  :pt1cable:  
 
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 :)


---------------
Just because you feel good does not make you right
n°514798
ozark74
Posté le 15-09-2003 à 11:41:45  profilanswer
 

DarkLord a écrit :


 
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 :)


 
 
pareil

n°514828
the real m​oins moins
Posté le 15-09-2003 à 12:20:32  profilanswer
 

[:blueflag] je lirai plus tard :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°514857
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 12:52:43  profilanswer
 

DarkLord 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 ...  :pt1cable:  
 
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 :)


 
Non non, il n'y a plus à s'étonner. Relisez mon DMC. :D 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. :whistle:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514858
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 12:55:15  profilanswer
 

DarkLord a écrit :


 
sauf que certaines licenses interdisent ce genre de choses :sarcastic:


J'y pensais justement. Y a-t-il modification des binaires dès qu'on déJarre une archive ?


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514900
benou
Posté le 15-09-2003 à 14:03:06  profilanswer
 

Krueger a écrit :


Non non, il n'y a plus à s'étonner. Relisez mon DMC. :D 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. :whistle:


je me disais aussi :)


---------------
ma vie, mon oeuvre - HomePlayer
n°514967
darklord
You're welcome
Posté le 15-09-2003 à 15:16:27  profilanswer
 

Krueger a écrit :


 
Non non, il n'y a plus à s'étonner. Relisez mon DMC. :D 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. :whistle:


 
Le Jar que j'ai testé contient les fichiers suivants :

Citation :


Hello.class
lib/hsqldb.jar
lib/saxon.jar
WEB-INF/MANIFEST.MF


 
 
:sarcastic:


---------------
Just because you feel good does not make you right
n°514972
Krueger
tout salaire demande dutravail
Posté le 15-09-2003 à 15:24:16  profilanswer
 

Je parlais du répertoire lib avant création de l'archive. :sarcastic:


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°514985
darklord
You're welcome
Posté le 15-09-2003 à 15:32:03  profilanswer
 

ah bin bravo :o


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Problème de classpath avec un fichier Jar

 

Sujets relatifs
[Delphi] Problème de transparence d'imagesProbleme avec le russe
phpBB2 : problème de frame[HTML] Problème de bordure avec une image...
classpath[PHP] Upload de fichier via "input type=file" [résolu : bug a la con]
Problème de marge[Java][Swing] Problème de taille avec JSplitPane [résolu]
[JAVA-Server X] UnsupportedLookAndFeelExceptio n 
Plus de sujets relatifs à : [Java] Problème de classpath avec un fichier Jar


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR