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 configuration variable CLASSPATH


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut Problème configuration variable CLASSPATH
    Bonjour à tous,

    Je developpe mes programmes java sous Eclipse mais je dois developper des classes utilisant RMI.
    Je dois donc compiler et executer du code java dans une fenetre DOS.
    J'ai configuré ma variable PATH pour pouvoir lancer les commandes javac, java, rmiregistry.
    Mais j'ai un probleme lors de l'execution d'une classe car je n'arrive pas à configurer ma variable CLASSPATH.
    Je sais que c'est un probleme classique, je l'ai vu dans ce forum. Meme en lisant les réponses apportées j'ai toujours le meme probleme.

    J'ai créé deux repertoires :
    - Pour le code source (.java) D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\src\org\com\jtlp
    Dans ce repertoire il y a un fichier ServiceHello.java

    - Pour le code compilé (.class) D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin\org\com\jtlp
    Dans ce repertoire il y a le fichier ServiceHello.class

    Je voudrais executer le programme ServiceHello.class dans le repertoire ou il se trouve, j'ai defini le CLASSPATH :
    set CLASSPATH=.;D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin\org\com\jtlp

    Mais lorsque je lance l'execution : java ServiceHello, j'ai le message d'erreur suivant :
    Exception in thread "main" java.lang.NoClassDefFoundError: ServiceHello (wrong name: org/com/jtlp/ServiceHello)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    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)
    Merci pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    le repertoire de base est "org", donc :
    set CLASSPATH=.;D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin

  3. #3
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Bonjour

    Citation Envoyé par inzagi Voir le message
    Mais lorsque je lance l'execution : java ServiceHello
    lance ton programme de cette facon:
    java -classpath ServiceHello

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Merci de votre aide

    Cela fonctionne correctement.
    Mais lorsque j'ajoute à ma classe ServiceHello l'instruction : package org.com.jtlp j'ai à nouveau le meme problème à l'execution.

    Savez vous comment resoudre ce problème ?
    Par avance merci

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Peut-être je vais dire un truc débile (me rappelles plus trop)...

    Et si tu fais ça ?

    java -classpath org.com.jtlp.ServiceHello

  6. #6
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Duc Lebowski Voir le message
    Et si tu fais ça ?

    java -classpath org.com.jtlp.ServiceHello
    Non : le classpath ne doit pas contenir le nom de la classe ou du package, mais le répertoire vers le(s) répertoire(s) de base qui contiennent les fichiers classes.

    Par répertoire de base j'entends le répertoire qui contient le tout premier package, et décompose le nom de la classe pour pouvoir retrouver le fichier *.class


    Donc la réponse de iohack doit fonctionner (mais attention aux espaces dans les noms de répertoire ).

    De plus je rappelle que java attend un nom de classe complet, c'est à dire avec l'éventuelle package :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java   -classpath "D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin"    org.com.jtlp.ServiceHello

    "D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin" + org.com.jtlp.ServiceHello
    "D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin" + org\com\jtlp\ServiceHello.class
    "D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin\org\com\jtlp\ServiceHello.class"
    le compte est bon !

    a++

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Par défaut
    Mon problème est résolu
    Merci de votre aide

    Une dernière question :
    Mon fichier ServiceHello.java est dans le répertoire D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\src\org\com\jtlp

    Lorsque je le compile avec la commande javac, le fichier compilé ServiceHello.class se trouve dans le meme répertoire que mon fichier source.
    Je dois faire du copie/coller sous WINDOWS pour qu'il soit dans le répertoire D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux\bin\org\com\jtlp

    Est ce qu'il y a une option avec la commande javac pour compiler dans un répertoire source et mettre le fichier compiler (.class) dans un autre répertoire ?

    Merci pour votre réponse.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Par défaut
    -d (pour directory)

  9. #9
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Il faut définir les paramètres -classpath (pour le classpath comme indiqué ci dessus), -sourcepath (pour le chemin des sources) et -d (pour le répertoire de base de destination.

    Donc dans ton cas :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
     javac   -classpath "Tableaux\bin\"    -sourcepath "Tableaux\src\"   -d "Tableaux\bin\"   chemin_vers_le_fichier.java

    Tableaux doit être remplacé par le chemin complet : "D:\Documents and Settings\Utilisateur\Mes documents\ProjetEclipse\Java\Tableaux"


    • -classpath indique au compilateur où rechercher les classes compilées
    • -sourcepath indique au compilateur où rechercher les sources des classes qui n'ont pas été compilé, ce qui arrive lorsque tu compiles une classe A qui utilise une classe B qui n'a pas été compilé.
    • -d indique au compilateur l'emplacement de destination des classes qu'il compiles. Ce répertoire doit exister mais les sous répertoires correspondant aux packages seront automatiquement créés...



    a++

    PS : Pour le résolu pense au bouton (en bas de page)

  10. #10
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    J'ai à peu près le même probleme mais sous linux.
    J'ai deux packages dans deux repertoires differents(mais les deux repertoire sont dans le meme repertoire), dans le premier j'ai des classes, dans le second j'ai une classe dans laquelle j'instancie des objets de l'autre classe.

    Bref je compil avec javac :
    javac -classpath .. MaClasseDu2emePackage.java
    Pas de problème.
    Mais c'est l'execution qui pose problème :
    java MaClasseDu2emePackage // ne marche pas
    java -classpath .. MaClasseDu2emePackage // non plus

    Merci de votre aide.

  11. #11
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    C'est bon j'ai trouvé, j'avais juste mal compris.

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

Discussions similaires

  1. Problème avec la configuration du classpath pour Axis
    Par mayim dans le forum Services Web
    Réponses: 0
    Dernier message: 20/12/2011, 04h22
  2. [JavaMail] Problème configuration / classpath ?
    Par kij dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/09/2009, 16h50
  3. Problème de variable
    Par vp dans le forum Windows
    Réponses: 2
    Dernier message: 14/05/2004, 16h27
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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