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

avec Java Discussion :

Problème de classpath [Débutant(e)]


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut Problème de classpath
    Salut à tous!

    J’ai une classe que je mets dans le package MonPack.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    package MonPack;
    Class Point {
    ……..
    }
    Le chemin pour arriver au répertoire MonPack est :

    C:\emacs\emacs-23.3\bin\MonPack
    A l’aide l’invite de commandes, quand je fais:

    C:\emacs\emacs-23.3\bin\MonPack> javac Point.java
    Il ya bien compilation. Il se forme dans le dossier MonPack la classe Point.class
    Mais quand je fais:

    C:\emacs\emacs-23.3\bin\MonPack>java Point

    Il affiche java.lang.NoClassDefFoundError
    C’est sans doute un problème de classpath. J’ai essayé plusieurs tentatives pour définir ma classpath, mais en vain. J’ai par exemple fait:

    C:\emacs\emacs-23.3\bin\MonPack>set CLASSPATH=.;C:\Users\evr2;C:\emacs\emacs-23.3\bin\MonPack
    Mais ça ne marche pas.

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    peux-tu nous afficher toute la trace de l´erreur?
    Eric

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    salut,
    peux-tu nous afficher toute la trace de l´erreur?
    Eric
    Bonjour jeffray03,

    l'erreur est la suivante:


    C:\emacs\emacs-23.3\bin\MonPack>java Point1
    Exception in thread "main" java.lang.NoClassDefFoundError: Point1 (wrong name: M
    onPack/Point1)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
    4)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Et puis quand je fais:

    C:\emacs\emacs-23.3\bin\MonPack>set %CLASSPATH%
    il m'affiche:
    la variable d'environnement .;C:\Users\evr2;C:\emacs\emacs-23.3\bin\MonPack n'est pas définie

  5. #5
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    si tu essais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\emacs\emacs-23.3\bin>java MonPack.Point1
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par freddou17 Voir le message
    Slt,

    si tu essais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\emacs\emacs-23.3\bin>java MonPack.Point1
    ++
    Merci freddou ça marche. mais je veux aussi comprendre pourquoi ça ne marche pas avec le classpath et comment utiliser le classpath pour que je n'ai plus à taper tout le temps java package.nom_de_laclasse

  7. #7
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    si ta classe est compilée avec un nom de package, tu devras la lancer avec mon.package.MaClasse (j'ai toujours fait comme ça et je ne connais pas d'autre manière). Pour le classpath la FAQ te donnes les différentes manières de le gérer. (Penses que tu dois le définir à la racine de tes sources).

    Je suis curieux de savoir s'il existe une solution pour lancer une classe java sans nom package...

    Bon courage
    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  8. #8
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,
    Citation Envoyé par freddou17 Voir le message
    Je suis curieux de savoir s'il existe une solution pour lancer une classe java sans nom package...
    Si la classe est dans un package, le nom de la classe complet est monpackage.nomClasse.
    La raison en est simple, rien empêche de créé deux classe dans des packages différents et qui ont le même nom.
    Ex : mon.package.classe1 et mon.package.different.classe1 ce sont des classes différentes mais si tu tente de lancer "java classe1", la JVM serait incapable de choisir laquelle prendre.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    bonjour,


    Si la classe est dans un package, le nom de la classe complet est monpackage.nomClasse.
    La raison en est simple, rien empêche de créé deux classe dans des packages différents et qui ont le même nom.
    Ex : mon.package.classe1 et mon.package.different.classe1 ce sont des classes différentes mais si tu tente de lancer "java classe1", la JVM serait incapable de choisir laquelle prendre.
    Merci Alkhan, merci freddou17,
    J'ai bien compris l'utilité de mettre le nom de la classe précédé du nom de son package.

    En faisant C:\emacs\emacs-23.3\bin>java MonPack.Point1
    on est dans le répertoire courant et l'éxécution ne pose aucun problème.

    Et si le classpath permet à la JVM d'aller chercher la classe au bon endroit, si on pouvait placer dans le classpath un chemin adéquat, ne serait-il pas possible d’exécuter la commande java MonPack.Point1 dans un autre répertoire autre que le répertoire C:\emacs\emacs-23.3\bin ? En fait, c'est l'objet de ma préoccupation. Je cherche ce chemin mais la JVM me dit la variable d'environnement n'est pas définie quand je fais set %CLASSPATH% et l'exécution du programme conduit à une erreur.

  10. #10
    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 confonds classpath et package. Le plus simple pour comprendre, c'est qu'une classe compilée, ne peut pas changer de package, c'est écrit en dur dans son .class

    Hors, si tu veux que ce que tu as compilé en "nom.package.Main" marche avec "java Main", tu signifique qu'elle peut changer de package. Ce n'est pas possible.

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par cherche_java Voir le message

    En faisant C:\emacs\emacs-23.3\bin>java MonPack.Point1
    on est dans le répertoire courant et l'éxécution ne pose aucun problème.

    Et si le classpath permet à la JVM d'aller chercher la classe au bon endroit, si on pouvait placer dans le classpath un chemin adéquat, ne serait-il pas possible d’exécuter la commande java MonPack.Point1 dans un autre répertoire autre que le répertoire C:\emacs\emacs-23.3\bin ? En fait, c'est l'objet de ma préoccupation. Je cherche ce chemin mais la JVM me dit la variable d'environnement n'est pas définie quand je fais set %CLASSPATH% et l'exécution du programme conduit à une erreur.

    Bonjour cherche_java,

    J'ai essayé de faire comme tu le veux, ça fonctionne.
    En fait, il suffit de faire:

    C:\emacs\emacs-23.3\bin> set CLASSPATH=%CLASSPATH%;C:\emacs\emacs-23.3\bin

    C:\emacs\emacs-23.3\bin c'est le chemin qui permettra à la JVM de retrouver ta classe MonPack.Point1

    et ensuite tu te places dans n'importe quel répertoire, par exemple: C:\Users et tu fais :

    C:\Users> java MonPack.Point1

    il y aura exécution du programme.

    Mais attention, le fait que tu places dans le CLASSPATH le chemin C:\emacs\emacs-23.3\bin à l'aide de l'invite de commande, il ne va pas y rester en permanence, il suffit de fermer l'invite de commande pour qu'il disparaisse.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Javamar Voir le message
    Bonjour cherche_java,

    J'ai essayé de faire comme tu le veux, ça fonctionne.
    En fait, il suffit de faire:

    C:\emacs\emacs-23.3\bin> set CLASSPATH=%CLASSPATH%;C:\emacs\emacs-23.3\bin

    C:\emacs\emacs-23.3\bin c'est le chemin qui permettra à la JVM de retrouver ta classe MonPack.Point1

    et ensuite tu te places dans n'importe quel répertoire, par exemple: C:\Users et tu fais :

    C:\Users> java MonPack.Point1

    il y aura exécution du programme.

    Mais attention, le fait que tu places dans le CLASSPATH le chemin C:\emacs\emacs-23.3\bin à l'aide de l'invite de commande, il ne va pas y rester en permanence, il suffit de fermer l'invite de commande pour qu'il disparaisse.
    Merci Javamar ça fonctionne. Mais aussi merci à tous.
    Une dernière question: quand est-ce qu'on peut utiliser l'option java -cp

  13. #13
    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 l'utilise quand tu en as besoin, c'est à dire à peu prêt tout le temps quand tu as des classes éclatées + des jars, ou quand tes jar n'ont pas leur dépendances configurées dans le MANIFEST.MF du jar.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu l'utilise quand tu en as besoin, c'est à dire à peu prêt tout le temps quand tu as des classes éclatées + des jars, ou quand tes jar n'ont pas leur dépendances configurées dans le MANIFEST.MF du jar.
    Merci tchize_ et merci à tous!

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

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