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 compilation - classpath


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut Problème de compilation - classpath
    Bonjour,

    J'ai un problème très con mais je ne comprends pas ce qu'il se passe:

    J'ai la structure de répertoire suivante:
    foo > test > xcomm
    xcomm contient A.class et B.java

    A.class:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    package xcomm;
    public class A{}
    B.java:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    package xcomm;
    public class B extends A{}
    quand je suis dans le répertoire xcomm et que je tape:
    il ne trouve pas la classe A. Pourtant j'ai bien mis le point.
    Une idée ? c'est surement très con comme explication mais je ne la vois pas.
    Merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Il ne faut pas te mettre dans le répertoire xcomm, mais dans le répertoire parent de xcomm.

    Le compilateur doit voir l'arborescence des répertoires de façon identique à l'arborescence des paquetages exprirmés dans les sources.

    Par ailleurs, au moment de la compilation, le classpath intéresse surtout les bibliothèques de référence, pas les fichiers sources.

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 766
    Par défaut
    Si tu n'es pas totalement débutant en Java, je conseille de passer rapidement à un ide comme Netbeans qui te génère automatiquement les bon packages (à la création ou via la fonction refactoring).

    Cela permet de passer du temps à se prendre la tête sur des problèmes qui en valent plus la peine.

  4. #4
    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 gifffftane Voir le message
    Il ne faut pas te mettre dans le répertoire xcomm, mais dans le répertoire parent de xcomm.
    Il faut surtout bien définir le classpath, en indiquant le répertoire de base des classes (c'est à dire le répertoire contenant le tout premier package).

    Citation Envoyé par gifffftane Voir le message
    Par ailleurs, au moment de la compilation, le classpath intéresse surtout les bibliothèques de référence, pas les fichiers sources.
    Les deux en fait...
    Par défaut le classpath vaut ".", et on le compilateur recherchera les classes à partir de l'emplacement courant.

    Tu peux changer le classpath pour indiquer de nouvelles librairies ou d'autres répertoire contenant des classes.


    Pour les codes sources il faut normalement spécifier le sourcepath, qui indiquera comment rechercher les classes sources dépendantes, mais par défaut il prend la même valeur que le classpath. Il est toutefois préférable de le spécifier manuellement.

    De même je conseillerais d'utiliser l'option -d pour définir l'emplacement des fichiers *.class générés...

    Si tu veux tout avoir dans la même arborescence les chemins seront les mêmes :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -classpath /foo/test -sourcepath /foo/test -d /foo/test chemin_vers_ton_fichier.java
    Et tu pourras compiler depuis n'importe quel répertoire en utilisant le chemin vers ton fichier *.java...


    Perso je te conseillerais d'utiliser 2 répertoires, par exemple :
    • /foo/test/src qui contiendra toute l'arborescence des fichiers *.java
    • /foo/test/bin qui contiendra les fichiers *.class généré par le compilateur.

    L'avantage c'est que tu sépares bien le code sources des fichiers classes...

    Tu compilerais donc comme ceci :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    javac -classpath /foo/test/bin -sourcepath /foo/test/src -d /foo/test/bin chemin_vers_ton_fichier.java

    Astuces : tu peux te créer un fichier contenant ces paramètres :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    -classpath /foo/test/bin
    -sourcepath /foo/test/src
    -d /foo/test/bin
    Et utilisé @ sur la ligne de commande pour interpréter ce fichier comme une liste de paramètres :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    javac @argsfile chemin_vers_ton_fichier.java


    Citation Envoyé par nicorama Voir le message
    Cela permet de passer du temps à se prendre la tête sur des problèmes qui en valent plus la peine.
    Je ne suis pas totalement d'accord : pour moi les mécanismes de compilation sont assez important à comprendre... même si un EDI apporte par la suite un confort non négligeable


    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 79
    Par défaut
    non je ne découvre pas Java. Je travaille sous Eclipse. C'est juste qu'au cours de ma lecture de la certif j'ai eu une question que j'ai pas trop compris et je la posais pour avoir explications qui m'éclaire un peu plus que celle du livre

    Le compilateur doit voir l'arborescence des répertoires de façon identique à l'arborescence des paquetages exprirmés dans les sources.
    Oui je veux bien mais je croyais qu'il aurait vu A.class du fait que je mette le point dans le classpath. Je vois pas trop à quoi il peut servir alors ce point... peut être dans le cas ou on n'a pas de package. a voir

    Je connaissais pas le coup du fichier en argument.

    Je vous remercie.
    ++

  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
    Citation Envoyé par dr23fr Voir le message
    Oui je veux bien mais je croyais qu'il aurait vu A.class du fait que je mette le point dans le classpath. Je vois pas trop à quoi il peut servir alors ce point... peut être dans le cas ou on n'a pas de package. a voir
    Le "point" sert lorsque tu lances la commandes depuis le répertoire de base de tes sources/classes (c'est d'ailleurs le cas lorsque tu n'as pas de packages).

    Si tu est dans le répertoire /foo/test/xcomm et que tu défini le classapth avec ".", c'est ce répertoire qui servira de base. Du coup lorsque tu utilises la classe xcomm.A alors le compilateur recherchera les fichiers xcomm/A.class et/ou xcomm/a.java depuis le répertoire de base du classpath, c'est à dire :/foo/test/xcomm/xcomm/A.java

    Comme ton classpath est incorrect le chemin qui en résulte est aussi incorrect, et il ne peut pas trouver le fichier...


    a++

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

Discussions similaires

  1. Problème de compilation à cause du CLASSPATH?
    Par miniRoshan dans le forum Général Java
    Réponses: 7
    Dernier message: 26/04/2010, 15h02
  2. Problème de compilation (classpath)
    Par thibane dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2008, 18h12
  3. [compilation][classpath] problème de classpath
    Par mavina dans le forum Langage
    Réponses: 7
    Dernier message: 28/07/2006, 10h57
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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