IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème de classpath


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Points : 1
    Points
    1
    Par défaut Problème de classpath
    Bonjour,

    Je cherche à executer un programme qui pète durant l'execution avec un noClassDefFound error. Ceci pour la classe javax.media.jai.PlanarImage alors que je l'ajoute bien au classpath (la classe est ds la lib jai_core.jar) (cf. ci dessous)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -cp ".;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\jai_codec.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\jai_core.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\jutf7-0.9.0.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunpkcs11.jar" -jar fr.intuitiv.tesseract.ocr-0.0.1-SNAPSHOT-jar-with-dependencies.jar C:\intuitiv\tesseract-ocr C:\intuitiv\tesseract-input edf

    Une idée pourquoi cette erreur ?

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour faire simple, quand tu utilises un jar exécutable, l'option -cp est désactivée.

    Accessoirement ajouter des jars dans le répertoire \lib\ext de ta JRE est une mauvaise idée, en effet cela risque de créer des conflits potentiels avec d'autres application java qui utiliseraient.

    La bonne façon de procéder est la suivante.

    Au niveau de ton application tu crées un répertoire lib dans lequel tu vas mettre l'ensemble des jars dont ton projet dépend (dnsns, jai_core et compagnie).

    Puis tu modifies le fichier MANIFEST.MF contenu dans le répertoire META_INF de ton jar exécutable en lui ajoutant la référence des jar dont tu dépends, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class-Path: dnsns.jar jai_core.jar
    De fait tu devras te retrouver avec dans un répetoire:

    .../fr.intuitiv.tesseract.ocr-0.0.1-SNAPSHOT-jar-with-dependencies.jar
    .../lib/dnsns.jar
    .../lib/jai_core.jar

    et ainsi de suite.

    Dans ce cas il te suffira de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java-jar fr.intuitiv.tesseract.ocr-0.0.1-SNAPSHOT-jar-with-dependencies.jar C:\intuitiv\tesseract-ocr C:\intuitiv\tesseract-input edf
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Points : 1
    Points
    1
    Par défaut
    Nickel !
    Merci pour cette réponse du tonnerre.

    Petite chose : le dossier .../lib/... est une "convention" java ?
    et si je veux stocker mes lib dans un autre dossier, comment fait-on ?
    au lieu de Class-Path: jai-core.jar il faut mettre mon_classpath:jai_core.jar non ?

    Merci.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Class-Path: dans le manifest.mf prend des fichier relatifs à l'emplacement du jar, tu peux donc les mettre ou tu veux tant que le chemin colle avec ce que tu met dans le manifest.mf. Le répertoire lib est plus une habitude qu'une convention, et n'est entout cas pas spécifié par java.

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le lib est juste une convention, mais absolument pas quelque chose d'obligatoire en JavaSE (en ce qui concerne les WAR, c'est potentiellement plus obligatoire, enfin dans le cadre d'un WAR autonome, pour les projets EE ça se passe encore autrement).

    En fait convention signifie juste pratique habituelle, mais n'implique absolument pas d'obligation.
    Tu pourrais l'appeler trucmachin, ce serait la même chose à partir du moment ou tu référencie trucmachin au lieu de lib dans ton manifest.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. [EAR] NoClassDefFoundError (problème de classpath?)
    Par Bb_TiTi dans le forum Java EE
    Réponses: 3
    Dernier message: 28/03/2006, 17h38
  2. [MySQL-JDBC] Problème de CLASSPATH
    Par stukov dans le forum JDBC
    Réponses: 3
    Dernier message: 14/03/2006, 13h55
  3. [ jar ] Problème de ClassPath
    Par remyli dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 11/07/2005, 14h07
  4. [ant]Problème de classpath
    Par le Daoud dans le forum Eclipse Java
    Réponses: 36
    Dernier message: 05/07/2005, 08h34
  5. [ Eclipse ][classpath] Problème de classpath
    Par pista dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 26/04/2004, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo