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 :

Où implanter un package?


Sujet :

avec Java

  1. #1
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut Où implanter un package?
    Bonjour,

    J'utilise Java depuis quelques jours seulement et je fais tout "à la main (avec un simple éditeur de textes)" pour essayer de bien comprendre tout ce qui se passe.

    Je veux faire du XML-RPC (un client) et j'ai téléchargé le .jar correspondant que j'ai décompressé. J'obtiens une hiérarchie de fichiers de classes org.apache.xmlrpc.xxxx. que j'ai placée dans un répertoire C:/Program Files/Java/classes. CLASSPATH pointe au même endroit.

    Je fais un import de cette hiérarchie dans mon fichier .java et javac renvoie une erreur car il ne connaît pas la classe XmlRpcClient.

    Quelqu'un saurait-il m'indiquer comment s'y prendre ?

    Merci d'avance pour votre aide.

  2. #2
    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,

    Tu n'as pas à décompresser le jar...


    Je te conseillerais de découper ton projet en 3 répertoires de base, par exemple :
    • bin qui contiendra le résultat de la compilation (les fichiers *.class)
    • src qui contiendra tes sources java, dans des sous-répertoires correspondant à leurs packages.
    • lib qui contiendra les librairies externes que tu utilises, directement au format jar.




    Ensuite, lorsque tu compiles, il faut préciser au minimum 3 éléments :
    • -sourcepath src/ qui indiquera au compilateur l'emplacement des fichiers sources.
    • -classpath lib/*;bin/ qui indiquera au compilateur les éléments du classpath, contenant le code déjà compilé.
      On lui passe donc tous les fichiers jar du répertoire lib, ainsi que le répertoire bin qui contiendra le code compilé.
      Attention la notation lib/* date de Java 5 ou 6 (je ne sais plus). Avant cela il faut préciser les fichiers jar un à un.
      Et te séparateur ";" correspond à Windows. Sous les autres systèmes il faut utiliser ":".
    • Enfin -d bin/ permet d'indiquer au compilateur l'emplacement des fichiers *.class qu'il génèrera


    A noter que tu peux placer tout cela dans un fichier de config pour éviter de le retaper, puis en passant le fichier de configuration à javac avec @.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javac @project.conf src/nom/du/package/Classe.java


    Enfin pour l'exécuter il faut faire la même chose, mais en se contentant du classpath...


    a++

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Comment est fait exactement ton import ?

    Sinon, pourquoi décompresser le jar ? Pourquoi ne pas le mettre directement dans ton classpath, sous forme de jar ?
    Par contre, tu devrais éviter de le mettre dans la variable CLASSPATH, et donc imposer à toutes tes applications ta librairie, et plutôt utiliser le classpath de ton application (java ou javac ... -cp classpath...).

    Par ailleurs, programmer dans un IDE ne t’empêchera pas plus de comprendre ce qu'il se passe, que de programmer dans un éditeur de texte et compiler par javac et exécuter par java. A partir du moment ou tu connais ces commandes, et que tu les as un peu manipulées, tu peux coder dans un IDE, sans perdre aucun moyen de comprendre quoique ce soit de plus.
    Tu comprendrais bien plus "ce qu'il se passe" en utilisant JVisualVM, quelque soit la manière de coder.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    bonjour,
    merci pour vos réponses
    Faire "à la main", c'est une habitude que j'ai prise quand j'ai débuté la prog. C'est peut être un leurre mais j'aime bien. Je choisi un IDE après quelques temps....

    Pour en revenir à ces histoires de packages, il y a des comportements bizarres que je ne m'explique pas.
    J'ai créé une classe Vehicule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    package exemples;
    public class Vehicule{
    	public void hello() {
    		System.out.println("Je suis un vehicule.");
    	}
     
    	// un constructeur
    	public Vehicule(String str) {
    		System.out.println("Constructeur de Vehicule " + str);
    	}
    }
    J'ai créé un répertoire racine mesPackages pour mes packages: d:/java/exo/chap03/mesPackages dans lequel je place un répertoire exemples qui contiendra le fichier Vehicule.class.
    Dans d:/java/exo/chap03, je teste cette classe Vehicule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import exemples.*;
    public class TstVehicule {
    	public TstVehicule () {
    	}
     
    	public static void main(String arg[]) {
    		System.out.println("Test Vehicule ");
    		Vehicule vh1 = new Vehicule ();
    		vh1.hello();
    		String str = ("Terrestre");
    		Vehicule vh2 = new Vehicule (str);
    	}
    }
    Un coup de javac -cp d:/java/exo/chap03/mesPackages TstVehicule.java

    A l'instanciation de vh1, une exception classNotFoundException exemples Vehicule est levée.
    Si je déporte TstVehicule.class dans le répertoire mesPackages, ça fonctionne correctement.
    Et je ne comprend pas du tout pourquoi...

    Merci pour vos lumières.

  5. #5
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    Bonjour,

    je n'ai pas précisé qu'en modifiant la variable CLASSPATH avec D:\java\exo\chap03\mesPackages ça fonctionne correctement mais comme le note joel.drigo, c'est pas terrible et pas très portable il me semble.
    D'où ma préférence pour un javac -cp

    Merci

  6. #6
    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
    Citation Envoyé par rdtech Voir le message
    Un coup de javac -cp d:/java/exo/chap03/mesPackages TstVehicule.java

    A l'instanciation de vh1, une exception classNotFoundException exemples Vehicule est levée.
    Y'a un problème là !
    Tu nous montres une ligne de compilation... et une erreur d'exécution !!!

    C'est ton appel à java qui doit être incorrect...


    Citation Envoyé par rdtech Voir le message
    Si je déporte TstVehicule.class dans le répertoire mesPackages, ça fonctionne correctement.
    Ca dépend de comment tu lances l'application...
    Je suppose que tu utilises java sans passer de classpath, et donc par défaut il prend le répertoire courant... ce qui est correct dans ce cas.



    a++

  7. #7
    Membre éclairé Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Points : 803
    Points
    803
    Par défaut
    En fait, tout faire à la main pour mieux comprendre est illusoire : en utilisant un IDE convenable (Eclipse, donc... :p ), c'est plus facile de comprendre car tout y est mieux organisé que ce à quoi on arrive quand on débute. En plus, quand on débute "à la main", on a tendance à vouloir ensuite adapter l'IDE aux solutions plus ou moins bricolées qu'on avait trouvées pour que "ça marche".

    Et en plus, ça prend un temps énorme d'apprendre avec un "simple traitement de texte" (et le manuel papier ?!) par rapport à tous les avantages d'un IDE : coloration syntaxique, aide intégrée, suggestion de correction d'erreurs etc, plein de messages qui vont à l'essentiel et nous empêchent de perdre du temps sur des fausses pistes, et aussi d'assimiler des erreurs, çad de trouver un truc incorrect pour que ça marche, et ne plus vouloir l'abandonner ensuite.
    Sans danger si utilisé conformément au mode d'emploi.

    (anciennement BenWillard, enfin moins anciennement que ... enfin bon c'est une longue histoire... Un genre de voyage dans le temps...)

  8. #8
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    Citation Envoyé par JoeChip Voir le message
    En fait, tout faire à la main pour mieux comprendre est illusoire : en utilisant un IDE convenable (Eclipse, donc... :p ), c'est plus facile de comprendre car tout y est mieux organisé que ce à quoi on arrive quand on débute. En plus, quand on débute "à la main", on a tendance à vouloir ensuite adapter l'IDE aux solutions plus ou moins bricolées qu'on avait trouvées pour que "ça marche".
    pas d'acc: je fais toujours commencer les débutants "à la main" en leur expliquant les contraintes. Ensuite ils passent à L'IDE avec ses avantages.
    Sinon on a aussi l'effet inverse: hors IDE la personne ne sait pas où se trouvent les choses.
    particulièrement vrai avec les ressources, les services et les jars.
    (de plus certains IDE -je ne citerai pas de nom pour ne fâcher personne- ont de facheuses habitudes en terme de disposition des sources et des binaires)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  9. #9
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    Bonjour,
    je reviens au commencement de ce qui m'a posé problème.

    De ce que j'ai compris de l'utilisation des packages, c'est qu'on les implantait dans un répertoire racine qui est pour moi d:/java/exo/chap03/mesPackages.

    Le répertoire vehicules avec le fichier Voiture.class s'y trouve avec sa déclaration package vehicules;.

    Je développe dans d:/java/exo/chap03 le fichier TstVehicule.java qui importe vehicules.*;

    En faisant javac -cp d:/java/exo/chap03/mesPackages TstVehicule.java je spécifie le chemin d'accès au répertoire racine de mes packages.
    Pour tester, je l'ai également mis dans CLASSPATH.

    La réponse est:
    TestVoiture.java:1: package vehicules does not exist
    import vehicules.*;
    ^
    TestVoiture.java:4: cannot find symbol
    symbol : class Voiture
    location: class TestVoiture
    static private Voiture Clio = new Voiture("clio", "175 ARM 83", true);
    ^

    Pourquoi ne voit-il pas le package vehicules ???
    Quand j'aurai trouvé, peut être pourrai-je dire que je comprend comment on manipule un package.

    Merci.

  10. #10
    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
    Citation Envoyé par rdtech Voir le message
    De ce que j'ai compris de l'utilisation des packages, c'est qu'on les implantait dans un répertoire racine qui est pour moi d:/java/exo/chap03/mesPackages.

    Le répertoire vehicules avec le fichier Voiture.class s'y trouve avec sa déclaration package vehicules;.
    Donc tu as bien un fichier d:/java/exo/chap03/mesPackages/vehicules/Voiture.class ?

    Citation Envoyé par rdtech Voir le message
    Je développe dans d:/java/exo/chap03 le fichier TstVehicule.java qui importe vehicules.*;
    Pourquoi utiliser plusieurs emplacements pour les sources ? TstVehicule.java devraient plutôt être dans d:/java/exo/chap03/mesPackages

    Citation Envoyé par rdtech Voir le message
    Pour tester, je l'ai également mis dans CLASSPATH.
    Non non et non. On t'as dit qu'il ne fallait pas l'utiliser. Pourquoi s'embrouiller avec cela ?
    Pourquoi faire simple quand on peut faire compliquer !!!



    Citation Envoyé par rdtech Voir le message
    Pourquoi ne voit-il pas le package vehicules ???
    Aucune idée.
    Vérifie toutes ton arborescence de fichier et ton code.
    C'est dur à suivre car à chaque message tu changes plein de chose (le package exemples est devenu vehicules, tu ne parles pas des mêmes erreurs, etc.)



    a++

  11. #11
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    reprenons les bases:
    soit un répertoires "src" et un répertoire "classes"
    on a l'arborescence: src->monpackage->monpackage2->MaClasse.java
    si on compile: javac -d classes src->monpackage->monpackage2->MaClasse.java
    on obtient:
    classes->monpackage->monpackage2->MaClasse.class
    si on a "classes" dans le CLASSPATH
    on devrait trouver: monpackage.monpackage2.MaClasse !
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  12. #12
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 289
    Points : 151
    Points
    151
    Par défaut
    Bonjour,

    OK, j'ai pigé l'arborescence à mettre en place. Je pensais que le répertoire racine pouvait être placé "n'importe où" dans l'arborescence du projet et que l'option -cp de javac permettait d'indiquer le chemin sans passer par le CLASSPATH.

    Merci à tous.

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

Discussions similaires

  1. Package devC++
    Par Fl0r3nt dans le forum Dev-C++
    Réponses: 15
    Dernier message: 29/10/2003, 14h42
  2. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37
  3. [JCreator] "package tools does not exists"
    Par snyper147 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 04/05/2003, 20h08
  4. [Packages] Problème d'organisation
    Par lolo... dans le forum JBuilder
    Réponses: 5
    Dernier message: 22/04/2003, 13h05
  5. Vue Packages
    Par ced dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/04/2003, 08h32

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