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 :

Compilation "a la main" en JAVA


Sujet :

avec Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Compilation "a la main" en JAVA
    Bonjour,

    Je m'entraine à compiler des .java à la main, mais je suis rapidement confronté à des problèmes.

    Voici mon problème, j'ai deux classes: Classe1.java et Classe2.java.
    Classe2 utilise Classe1.
    Je me place dans le répertoire (avec mon terminal) ou se trouvent mes deux classes.
    Je fais
    > javac Classe1.java // Création de Classe1.class
    > javac Classe2.java // Création de Classe2.class
    > java Classe2 // Exécution de Classe2

    Jusque la tout vas bien.

    Mais maintenant, j'essaie de mettre mes deux classes dans un dossier ABC sans changer l'endroit de mon terminal.
    Je fais donc
    > javac ABC/Classe1.java // Création de Classe1.class dans le répertoire ABC
    Jusque la ca va. Mais
    > javac ABC/Classe2.java // Ne fonctionne pas

    J'obtient plusieurs erreurs. En faite, a la compilation, la Classe1 n'est pas pris en compte alors qu'elle l'été dans le cas précédents.

    Jspr que vous pourriez m'expliquer pourquoi et comment faire.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 995
    Points
    7 995
    Par défaut
    Citation Envoyé par Jujudu597 Voir le message
    J'obtient plusieurs erreurs.
    Ha ben ça aurait été bien de les montrer les erreurs

    Sinon au hasard, à mon avis ca doit être une histoire de déclaration de package, ou d'import qui ne cherche pas le bon package ?

  3. #3
    Membre expérimenté Avatar de nchal
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 512
    Points : 1 656
    Points
    1 656
    Par défaut
    Oui, typiquement, si Classe2 a une dépendance vers Classe1, fait attention au path des imports

  4. #4
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses!

    Je n'ai mis aucun "package" je ne sais pas encore exactement ce que c'est.
    Le package est nécessaire même si les deux classes sont dans le même dossier?

    Mais si ça fonctionne dans le dossier ou je suis, pourquoi ça ne fonctionnerais pas dans un autre?

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 562
    Points : 21 625
    Points
    21 625
    Par défaut
    En l'occurrence non, ce n'est pas une question de package.

    Citation Envoyé par Jujudu597 Voir le message
    Mais si ça fonctionne dans le dossier ou je suis, pourquoi ça ne fonctionnerais pas dans un autre?
    Parce que javac peut assez facilement se douter à la rigueur, qu'il doit chercher les classes dans le dossier en cours, mais qu'il ne va pas deviner qu'elles sont ailleurs ?

    Utilise -cp ABC pour lui indiquer le "classpath", l'emplacement où il doit aller chercher les classes.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci à vous tous pour vos réponses.
    En effet, c'était bien un problème de CLASSPATH.

    La solution était donc
    CLASSPATH=./ABC
    export CLASSPATH
    javac ABC/Classe2.java
    java Classe2

    Cependant, je voudrais maintenant mettre ma Classe1 dans le répertoire ABC et Classe2 dans le répertoire précédent. Je place mon terminal dans le même répertoire que Classe2 mais je n'arrive pas à compiler (oui encore!).

    J'ai bien ajouter package ABC; au début de ma Classe1
    et import ABC.SommeN; au début de ma Classe2

    Cependant, lorsque je fais
    > javac ABC/Classe1.java
    j'ai bien la création de Classe1.class dans le dossier ABC.
    Puis
    > export CLASSPATH=./ABC
    > javac Classe2.java
    Mais j'ai les erreurs suivantes

    import ABC.Classe1;
    ^
    Classe2.java:8: error: cannot access Classe1
    Classe1 A, B ;
    ^
    bad class file: ./ABC/Classe1.class
    class file contains wrong class: ABC.Classe1
    Please remove or make sure it appears in the correct subdirectory of the classpath.
    2 errors

    Je pense donc qu'il vaut positionner le CLASSPATH dans le répertoire de mon terminale ET dans ABC mais je ne sais pas comment faire.

    Jspr que vous pourriez m'aider. Merci d'avance

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