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 :

[Java][Classpath] compilation qui fonctionne mais pas exécution


Sujet :

Langage Java

  1. #1
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut [Java][Classpath] compilation qui fonctionne mais pas exécution
    Salut,

    Je veux faire un programme tout simple qui envoie des mails.
    Quand je le compile, tout va bien, via la commande :

    C:\Pierre>javac -classpath .\libs\mail.jar *.java
    Ca compile, pas de problèmes.

    Là ou ça peche, c'est à l'exécution, j'ai le droit à un NoClassDefFoundError :
    C:\Pierre>java -classpath .\libs\mail.jar SendMail
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address
    at SendMail.main(SendMail.java:10)
    Caused by: java.lang.ClassNotFoundException: javax.mail.Address
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 1 more
    Ces histoires de classpath restent encore et toujours obscures pour moi, pourquoi ça compile mais ca n'exécute pas ?

    Merci

    F.
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  2. #2
    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
    tu a oublié le répertoire courant dans le classpath d'exécution. Ce répertoire courant n'est pas nécessaire à la compilation car le compilateur ajoute d'office au classpath le répertoire de compilation pendant ce processus

    donc pour exécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C:\Pierre>java -classpath .\libs\mail.jar;. SendMail
    Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address
    at SendMail.main(SendMail.java:10)
    Caused by: java.lang.ClassNotFoundException: javax.mail.Address
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    ... 1 more
    Ce qui m'étonne, c'est que t'aurais du avoir le NoClassDefFoundError sur le SendMail, pas sur le des classes de javax (car celles-ci sont bien incluse dans ton classpath mais pas SendMail). T'as probablement du combiner cet oubli du "." avec un faute de frappe

    A noter que, pour une fois, quelqu'un qui utilise correctement le classpath dans java, ça fait plaisir à voir

  3. #3
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Ah ouep ça fonctionne, je ne pensais pas qu'on devait mettre le répertoire courant. C'est un peu mal fait que la compilation passe mais pas l'exécution. Anyway, c'est résolu, merci beaucoup !!

    F.
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par mavina Voir le message
    C'est un peu mal fait que la compilation passe mais pas l'exécution.
    C'est surtout un coup de chance car tu dois être sur un cas simple...

    A la compilation tes fichiers sources sont recherché dans le répertoire courant car le compilateurs utilise le chemin que tu lui passes en paramètres (*.java). Le classpath n'entre donc pas en compte pour rechercher tes classes mais seulement les classes de javamail...

    Si tu utilises plusieurs packages tu sera obligé de spécifier le répertoire de base de tes classes lors de la compilation



    A l'exécution avec java tu ne spécifies pas de nom de fichier, mais un nom de classe, et donc tu utilises le classpath pour le rechercher ce qui t'oblige à spécifier le répertoire de base...


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Condition If qui fonctionne mais pas Else
    Par Christophe.G dans le forum VBScript
    Réponses: 16
    Dernier message: 05/12/2014, 01h15
  2. SELECT qui fonctionne mais pas UPDATE
    Par Kentin64 dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/08/2011, 12h04
  3. Crawsler qui fonctionne mais pas totalement
    Par lemirandais dans le forum Langage
    Réponses: 1
    Dernier message: 02/08/2009, 01h25
  4. Réponses: 1
    Dernier message: 03/08/2007, 10h09
  5. [FLASH 8] : FLA qui fonctionne mais pas le SWF
    Par xtaze dans le forum Flash
    Réponses: 9
    Dernier message: 24/10/2006, 09h14

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