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

  FORUM HardWare.fr
  Programmation
  Java

  Utilisation de .jar externes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utilisation de .jar externes

n°923933
zedar
Posté le 15-12-2004 à 15:21:40  profilanswer
 

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

mood
Publicité
Posté le 15-12-2004 à 15:21:40  profilanswer
 

n°923949
benou
Posté le 15-12-2004 à 15:27:24  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°923961
zedar
Posté le 15-12-2004 à 15:30:26  profilanswer
 

ç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
n°923967
benou
Posté le 15-12-2004 à 15:32:08  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°923981
zedar
Posté le 15-12-2004 à 15:35:38  profilanswer
 

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)

n°924094
zedar
Posté le 15-12-2004 à 16:19:16  profilanswer
 

C'est foutu ? :'(

n°924145
benou
Posté le 15-12-2004 à 16:49:48  profilanswer
 

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
n°924181
zedar
Posté le 15-12-2004 à 17:06:46  profilanswer
 

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:

n°924188
benou
Posté le 15-12-2004 à 17:11:45  profilanswer
 

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
n°924205
zedar
Posté le 15-12-2004 à 17:20:40  profilanswer
 

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

mood
Publicité
Posté le 15-12-2004 à 17:20:40  profilanswer
 

n°924212
benou
Posté le 15-12-2004 à 17:25:06  profilanswer
 

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
n°924217
zedar
Posté le 15-12-2004 à 17:27:50  profilanswer
 

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

n°924220
benou
Posté le 15-12-2004 à 17:35:09  profilanswer
 

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
n°924228
zedar
Posté le 15-12-2004 à 17:42:14  profilanswer
 

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

n°924247
benou
Posté le 15-12-2004 à 18:00:45  profilanswer
 

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


---------------
ma vie, mon oeuvre - HomePlayer
n°924249
zedar
Posté le 15-12-2004 à 18:01:08  profilanswer
 

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:

n°924252
benou
Posté le 15-12-2004 à 18:02:45  profilanswer
 

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
n°924254
zedar
Posté le 15-12-2004 à 18:04:47  profilanswer
 

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

n°924389
benou
Posté le 15-12-2004 à 19:33:10  profilanswer
 

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

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

  Utilisation de .jar externes

 

Sujets relatifs
Utilisation d'une base de données avec VB 6.0Utilisation de la STL avec Compaq Visual
[HELP] utilisation ID et IDREFLien dans un "onclick" après utilisation de <base href=..>
[GNU] question sur l'utilisation des autotoolsutilisation des pointeurs pour des matrices 2*2
Utilisation du TDBChart avec builder?utilisation et composants
[JSP] Utilisation de classes personnellesUtilisation de la librairie standard du C++ aevc pgf90
Plus de sujets relatifs à : Utilisation de .jar externes


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)