Utilisation de .jar externes

Utilisation de .jar externes - Java - Programmation

Marsh Posté le 15-12-2004 à 15:21:40    

Salut,
 
Je reprends le problème que j'ai posé dans le topic Eclipse, mais qui ne semble finalement pas lié à Eclipse :
 
Mon application est un .jar qui utilise 2 jar externes (poi pour des classes en rapport avec Excel et sybase pour des requêtes SQL).
Hors j'ai un problème à l'exécution, il me dit :

Code :
  1. java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/POIFSFileSystem
  2.         at indicateurs.calculIndicateurs.<init>(calculIndicateurs.java:67)
  3.         at indicateurs.Process$1.construct(Process.java:28)
  4.         at indicateurs.SwingWorker$2.run(SwingWorker.java:108)
  5.         at java.lang.Thread.run(Unknown Source)


 
où POIFSFileSystem est une classe contenue dans le poi.jar (et la première à être exécutée par mon programme dans la classe calculIndicateurs).
 
J'ai essayé de lancer avec un "java -classpath chemin\poi.jar;chemin\sybase.jar -jar indicateurs.jar" (où indicateurs.jar est mon programme).
J'ai ensuite essayé de construire mon jar en modifiant à la main le manifest.fm en spécifiant un Class-Path: . poi.jar sybase.jar, comme je l'ai vu dans d'autres topics traitant du sujet.
Mais ça n'a rien changé.
 
Quelqu'un aurait-il une idée pour me sortir de là svp? Je me vois mal expliquer à mes utilisateurs qu'il faut installer Eclipse pour pouvoir lancer mon appli :o

Reply

Marsh Posté le 15-12-2004 à 15:21:40   

Reply

Marsh Posté le 15-12-2004 à 15:27:24    

tu peux faire  
java -classpath chemin\poi.jar;chemin\sybase.jar;indicateurs.jar le.nom.de.ta.Class


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 15:30:26    

ça ça marche (il me dit qu'il lui faut 2 arguments) :  

Code :
  1. C:\>java -classpath c:\poi.jar;c:\sybase.jar;c:\indicateurs.jar org/apache/poi/poifs/filesystem/POIFSFileSystem
  2. two arguments required: input filename and output filename


 
Mais je ne vois pas comment utiliser cette information pour débloquer mon problème :??:
 
Merci en tout cas :jap:


Message édité par zedar le 15-12-2004 à 15:30:39
Reply

Marsh Posté le 15-12-2004 à 15:32:08    

il avait quelle tête le manifest que tu as essayé de mettre dans le jar ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 15:35:38    

Vu que j'essayais d'inclure les poi.jar et sybase.jar dans mon indicateurs.jar j'ai mis ça :  

Code :
  1. Manifest-Version: 1.0
  2. Main-Class: indicateurs.indicateurs
  3. Name: indicateurs/
  4. Class-Path: . poi.jar sybase.jar

après avoir lu un topic sur le sujet (je ne connais rien à la syntaxe de ce fichier et je cherche en ce moment sur le net)

Reply

Marsh Posté le 15-12-2004 à 16:19:16    

C'est foutu ? :'(

Reply

Marsh Posté le 15-12-2004 à 16:49:48    

http://java.sun.com/j2se/1.3/docs/ [...] 20Manifest
 
je vois pas à quoi te sers le '.', vire le ...
et essaye en mettant .\ devant les jars
 
cf http://java.developpez.com/faq/jav [...] reationJar
 
je suis surpris qu'il faille repréciser le classpath dans la ligne de lancement du prog [:urd]
tu peux tester et vérifier si c'est obligatoire ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 17:06:46    

Bon j'ai essayé avec ce manifest :

Code :
  1. Manifest-Version: 1.0
  2. Main-Class: indicateurs.indicateurs
  3. Name: indicateurs/
  4. Class-Path: .\poi.jar .\sybase.jar

(Je pars d'un généré par Eclipse en ajoutant le Class-Path)
 
Dans la ligne de commande, avec ou sans le -classpath (et avec ou sans les " " ) ça me lève toujours l'exception :'(
 
Le problème pourrait venir de mon code sinon ? Mais alors pourquoi ça marcherait dans l'ide ? Et l'appel est on ne peut plus simple :  

Code :
  1. POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("c:\\indicateurs.xls" ));


 
Merci encore :jap:

Reply

Marsh Posté le 15-12-2004 à 17:11:45    

nan, c'est pa sun problème de ton code NoClassDefFound : a l'execution il trouve pas la classe => ca veur dire qu'il n'a pas le jar dans le classpath ...
 
t'as bien un retour chariot à la fin de ton manifest ?
tes fichiers jar sont bien tous dans le même rep ?
 
essaye en mettant des ./ à la place des .\ dans le manifest


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 17:20:40    

Mes .class et mes .jar se trouvent dans un répertoire indicateurs/ à l'intérieur de indicateurs.jar.
 
J'ai essayé de mettre les poi.jar et sybase.jar à la racine.
 
Mais toujours le même problème.
 
Et il y a bien un retour chariot à la fin du manifest.
 
De toute façon, en forçant "classpath c:\poi.jar" à l'exécution (on peut pas faire plus explicite...) je comprends pas comment ça peut ne pas trouver la classe :??:

Reply

Marsh Posté le 15-12-2004 à 17:20:40   

Reply

Marsh Posté le 15-12-2004 à 17:25:06    

Zedar a écrit :

Mes .class et mes .jar se trouvent dans un répertoire indicateurs/ à l'intérieur de indicateurs.jar.


[:kiki]
 
faut pas mettre les jars dans ton jar ! faut ler laisser à côté !


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 17:27:50    

C'était un test, mais effectivement ça marche pas mieux avec [:petrus75]
 
Désolé si je t'ai choqué :/

Reply

Marsh Posté le 15-12-2004 à 17:35:09    

Zedar a écrit :

C'était un test, mais effectivement ça marche pas mieux avec [:petrus75]
 
Désolé si je t'ai choqué :/


t'en es où la alors ?
 
je récapitule :  
* les jars nécessaire à ton jar dans le même rep que ton jar
* ton jar qui contient le Class-Path sous la forme : Class-Path: poi.jar sybase.jar (y a pas besoin des ./ ou .\ d'apres ca)
* la ligne de commande java -classpath poi.jar;sybase.jar -jar indicateurs.jar
 
ca marche pas ca ???


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 17:42:14    

non :cry:
 
- J'ai tous mes .jars dans c: (pour faciliter les commandes shell)
- mon manifest :

Code :
  1. Manifest-Version: 1.0
  2. Main-Class: indicateurs.indicateurs
  3. Name: indicateurs/
  4. Class-Path: poi.jar sybase.jar

avec un retour à la ligne, dans un répertoire meta-inf dans l'indicateurs.jar
- et je lance bien avec cette ligne de commande.
 
Je comprends vraiment pas comment ça peut ne pas marcher...
 
Merci de ton aide et de la rapidité de tes réponses en tout cas

Reply

Marsh Posté le 15-12-2004 à 18:00:45    

c'est quoi ton "Name: indicateurs/" là ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 18:01:08    

Bon j'ai réussi (:bounce:) mais en faisant un truc sans doute un peu crade :
 
j'ai inclus dans mon .jar les autres .jar décompressés, directement à la racine... Du coup avec un manifest par défaut ça passe nickel...
 
Quelqu'un pourrait m'expliquer pourquoi ça, ça marche et pas les commandes précédentes svp ? La différence m'échappe...
 
En tout cas merci bcp Benou pour ta patience :jap:

Reply

Marsh Posté le 15-12-2004 à 18:02:45    

vérifie mais je crois que tu n'as pas le droit de décompiler les jar ... c'est pas compatible avec la license ...
 
et ca marche justement parce que là il trouve la classe. [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-12-2004 à 18:04:47    

Oui mais pourquoi ne la trouvait-il pas dans le cas d'un jar compressé ?
 
je ne vais de toute façon pas livrer le prog en l'état, quelques 5000 fichiers dans l'archive ça fait sale, mais je trouve "intéressant" que ça marche comme ça, alors qu'il me semblait que c'était équivalent :??:

Reply

Marsh Posté le 15-12-2004 à 19:33:10    

Zedar a écrit :

Oui mais pourquoi ne la trouvait-il pas dans le cas d'un jar compressé ?


ca c'est juste parce qu'on lui dis pas de la bonne façon => il cherche même pas dans le jar.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed