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

Eclipse Java Discussion :

[D�butant] Probl�me de Build Path dans Eclipse


Sujet :

Eclipse Java

  1. #1
    Invit�
    Invit�(e)
    Par d�faut [R�solu][D�butant] Probl�me de Build Path dans Eclipse
    Bonjour,

    J'ai donc un probl�me avec l'utilisation des Build Path dans Eclipse. Il s'agit d'une petite application que l'on m'a donn� � faire (dans le cadre d'un TP). On nous a donn� des classes et nous devons les utiliser afin de faire une petite application sur la Programmation Concurrente.

    Le probl�me est que Eclipse trouve une erreur de ce type : "The type Observateur cannot be resolved. It is indirectly referenced from required .class files" dans le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import ProdCons.se_lib.Acteur;
    import ProdCons.se_lib.Observateur;
     
    public class Producteur extends Acteur{
     
    	/**
             * Nombre de message à envoyer par le producteur.
             */
    	private int nombreMsg; 
     
    	/**
             * Constructeur d'un Producteur.
             * @param nombreMsg le nombre de message qu'il va pouvoir créer.
             * @param observateur l'observateur à qui rendre compte.
             * @param moyenneTempsDeTraitement le temps moyen de traitement d'un message.
             * @param ecartType  l'ecart type du temps moyen de traitement.
             */
    	public Producteur(int nombreMsg, Observateur observateur, int moyenneTempsDeTraitement, int ecartType){
    		new Acteur(Acteur.typeProducteur, observateur, moyenneTempsDeTraitement, ecartType);
    		this.nombreMsg = nombreMsg;
    		start();
    	}
    }

    L'erreur se trouve dans la d�finition du constructeur Producteur (c�d public Producteur...). Eclipse souligne la ligne compl�te...

    Ce qui est �tonnant c'est que je peux cr�er un nouvel objet Observateur. Je pense donc que le Build Path du projet est correct. Pourtant si j'essaye de faire corriger l'erreur par Eclipse, il me demande de configurer le Build Path...

    Avez-vous une id�e ? car je commence un peu � d�sesp�rer apr�s 3h de recherche infructeuse...

    Merci.

    PS : j'esp�re avoir �t� clair...

  2. #2
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    'soir,
    Tu devrais changer ton par

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    alors j'ai chang� mon code, mais cela ne r�soud pas le probl�me... Cependant Eclipse d�place l'erreur sur la ligne

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    super(Acteur.typeProducteur, observateur, moyenneTempsDeTraitement, ecartType);
    j'ai remarqu� aussi que si je mettais juste super(); la m�me erreur apparaissait toujours...

  4. #4
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    re'soir,
    Bon, pour le super, c'est toujours �a de fait, m�me si ce n'est pas suffisant.

    Ensuite, je te propose un truc pas forcement tr�s beau, mais �a marche.

    On nous a donn� des classes
    Si tu as le .jar correspondant (solution la plus simple) il te suffit de faire :

    clic droit sur ton projet, Propri�t� > Java build path > Librairies : bouton add External jar. L�, tu choisis le chemin de ton jar.
    Ensuite, tu vas dans l'onglet : Propri�t� > Java build path > Order et export et tu coches la case devant le jar que tu viens d'importer.

    Bon, si tu n'as pas de jar associ� � tes classes, le probl�me va �tre un peu plus compliqu�. On va cr�er ce .jar.
    Pour cela, il faut cr�er un syst�me de r�pertoires correpondant au chemin de tes packages :
    Si ton package est : ProdCons.se_lib
    il te faut un r�pertoire ProdCons avec DEDANS un autre r�pertoire se_lib etc... (la s�paration se fait avec le point dans le nom du package)

    Une fois se syst�me de r�pertoires termin�, tu places dedans tes .class.

    Par exemple, Acteur et Observateur se trouveront dans le r�pertoire se_lib

    Enfin, tu cr�es � la racine des ces r�pertoires un autre r�pertoire que tu vas nommer : META-INF
    Dedans ce META-INF, il faut mettre un fichier qui se nomme MANIFEST.MF et qui contient : juste cette ligne

    Une fois, termin�, tu compresses tes r�pertoires situ�s � la racine ainsi que ton META-INF dans un seul fichier que tu vas nommer bibli par exemple. Si tu l'as compress� en zip, change l'extension en .jar et hop, on revient � la partie vue plus haut...

    Ca peut avoir l'air un peu compliqu� mais c'est tout simple en fait.
    Bon courage.

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    'jour et merci de tes r�ponses,

    j'avais d�j� le .jar mais j'avais du le modifier pour mettre un r�pertoire � l'interieur car je n'arrivais pas � importer les classes d�finies... J'avais donc fait la manipulation que tu avais d�crite...

    Apr�s une petite heure de recherche, je ne pense pas que l'on puisse m'aider (� par les profs qui ont cr�� les fichiers .class). En effet j'ai remarqu� que l'erreur apparaissait lorsque je faisait un extends... Je viens de penser que cela venait peut �tre du fait que j'ai cr�e un r�pertoire dans le .jar alors qu'il n'y en avait aucun. Peut-�tre que les classes ne peuvent plus �tre li�es car le chemin a chang� !

    Ce qui m'am�ne � une question : comment je fait pour importer un fichier .class qui est dans un pakage par d�faut qui est lui m�me dans un .jar? En effet je ne peux pas faire un truc du style :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    import ProdCons.Observateur;
    Eclipse me dit import ProdCons cannot be resolved.
    : :

  6. #6
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    'jour,

    En fait, si tu as d�j� modifi� le .jar en ajoutant un r�pertoire, cela semble normal que l'import ne marche pas.

    Le syst�me de r�pertoire doit �tre li� au nom du package d�finit dans la classe.
    MonPackage1.MonPackage2.MonPackage3.MACLASSE
    pour
    MonPackage1 > MonPackage2 > MonPackage3 > MACLASSE.class

    Pour retrouver exactement le package, tu peux toujours d�compiler tes classes (voir la rubrique des outils java sur le site).

    Dans les sources, tu pourrais m�me en profiter pour changer les noms de package de fa�on � se "qu'ils collent" avec ce que tu as fait dans le jar.

    En r�sum� :

    Tu d�compiles les sources de tes profs
    Tu changes les noms de package
    Tu recr�es ton .jar en tenant compte des noms de package

    je ne pense pas que l'on puisse m'aider (� par les profs qui ont cr�� les fichiers .class)
    Y a pas de raison... on est pas plus b�te qu'un prof... enfin j'esp�re...

  7. #7
    Invit�
    Invit�(e)
    Par d�faut
    alors j'ai essay� de modifier les sources une fois les .class d�compil�es mais c'est p�nible... donc je voulais savoir si je pouvais �viter de faire ca en pouvant importer des classes qui sont d�finies dans le paquetage par d�faut d'un fichier jar ?
    car comme je l'ai dit dans mon message pr�c�dent, la ligne :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    import ProdCons.Observateur;
    ne fonctionne pas, et comme il s'agit d'un paquetage par d�faut, il n'a pas de nom donc je ne peux pas le mettre dans la ligne... (j'esp�re que l'on me comprendra... )

    sinon quand j'ai dis que seul les profs pouvaient m'aider c'est que je pensais qu'il y avait des erreurs dans le .jar qu'on nous a donn�...

  8. #8
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    Je reconnais mes limites : je ne sais pas comment importer des classes contenues dans un package par defaut dans un jar.
    Mais je ne suis pas le seul
    http://www.developpez.net/forums/vie...&view=previous
    et du coup, j'en viens m�me � me demander si c'est possible.


    Ceci dit, je ne crois pas qu'il soit si difficile de changer les sources (sauf si tu as beaucoup de fichiers)

    Il te suffit de d�compiler tes classes
    Acteur;
    Observateur;
    Ensuite, en haut de chaque source, tu ajoutes :

    Tu les compiles et tu places les .class dans le r�pertoire MonPackage dans ton jar.

    Autre solution, tu peux aussi, une fois d�compil�es, recr�er les classes associ�es dans Eclipse, dans ton projet
    • Nouveau
      class
      et tu les nommes Acteur et Observateur


    Puis il faut copier le code source que tu as obtenu lors de la d�compilation.

    PS : pour le d�compilateur, je te conseil DJ Java Decompiler 3.9 assez simple d'utilisation.

  9. #9
    Invit�
    Invit�(e)
    Par d�faut
    le probl�me c'est que les profs ont dus utiliser des classes � eux pour faire ces sources. En effet dans le code d�compil� il y a un type Controleur qui n'existe pas, du coup je ne peux pas utiliser les sources...
    je vais donc chercher si on peut importer des classes contenues dans un package par defaut dans un jar.

    en tout merci de ton aide !

  10. #10
    Expert confirm�

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    D�tails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Fabricant et casseur d'avions
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par d�faut
    Salut,

    Citation Envoy� par vincent63
    Je reconnais mes limites : je ne sais pas comment importer des classes contenues dans un package par defaut dans un jar.
    Mais je ne suis pas le seul
    http://www.developpez.net/forums/vie...&view=previous
    et du coup, j'en viens m�me � me demander si c'est possible.
    Ben oui, il suffit d'importer la classe comme une classe normale non contenue dans un jar.
    Le syst�me des import permet simplement de simplifier la d�nomination des classes que l'on utilise dans le code, �a �vite de se retaper tout le chemin des packages � chaque fois.
    Exemple, si tu utilises la classe MaClass contenue dans le package MonJar.MonPackage1.MonSousPackage1, soit tu te tapes:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ... new MonJar.MonPackage1.MonSousPackage1.MaClass()
    � chaque fois que tu en as besoin, soit:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    import MonJar.MonPackage1.MonSousPackage1.MaClass;
    ...
    ...
    ... new MaClass()
    Si il n'y a pas de package, donc aussi pour le package par d�faut, il n'y a pas d'import � faire... tu utilises la classe directement. Il suffit qu'elle (ou le jar) soit dans la classpath pour la compilation.

    Citation Envoy� par vincent63
    Ceci dit, je ne crois pas qu'il soit si difficile de changer les sources (sauf si tu as beaucoup de fichiers)
    Personnellement, je ne pense pas que la d�compilation soit l'objet du TP... si les profs ont fourni les classes � utiliser, c'est pour les utiliser, pas pour les d�compiler,modifier, refaire le jar, bidouiller � droite et � gauche....

    MoRpHoGeLL, tu dis que le jar ne comporte pas de r�pertoire, donc pas de package. Dans ce cas, pourquoi faire des imports?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    import ProdCons.se_lib.Acteur;
    import ProdCons.se_lib.Observateur;
    A quoi correspond ProdCons.se_lib?
    Le fichier Jar fourni par tes profs est-il bien dans le Build Path? (m�thode que t'as donn� vincent63, clic droit sur ton projet, Propri�t� > Java build path > Librairies : bouton add External jar)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  11. #11
    Invit�
    Invit�(e)
    Par d�faut
    dans le .jar fourni, il n'y avais que les fichiers .class ansi que le META-INF. Comme je n'arrivais pas � importer ces classes, j'ai d�compresser le .jar et j'ai cr�e un r�pertoire se_lib et je recompressait le tout.
    => c'�tait une erreur car les fichiers .class n'appartenait pas un package donc cela ne marchait pas.

    je suis reparti avec le .jar donn� par les profs, je l'ai bien inclu dans le Build Path du projet (et j'ai m�me cocher dans Order and Export). Cependant je ne peux pas utliser les classes d�finies dans ce .jar : j'ai une erreur de ce type
    Acteur cannot be resolved to a type
    voici le code (pour voir si j'appelle la classe correctement)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    package tp_ProdCons;
     
    public class Producteur extends Acteur{
     
    	/**
             * Nombre de message à envoyer par le producteur.
             */
    	private int nombreMsg; 
     
    	/**
             * Constructeur d'un Producteur.
             * @param nombreMsg le nombre de message qu'il va pouvoir créer.
             * @param observateur l'observateur à qui rendre compte.
             * @param moyenneTempsDeTraitement le temps moyen de traitement d'un message.
             * @param ecartType  l'ecart type du temps moyen de traitement.
             */
    	public Producteur(int nombreMsg, Observateur observateur, int moyenneTempsDeTraitement, int ecartType){
    			super(Acteur.typeProducteur, observateur, moyenneTempsDeTraitement, ecartType);
    			this.nombreMsg = nombreMsg;
    			this.start();
    	}
    }
    : :

  12. #12
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    Ben oui, il suffit d'importer la classe comme une classe normale non contenue dans un jar.
    Le syst�me des import permet simplement de simplifier la d�nomination des classes que l'on utilise dans le code, �a �vite de se retaper tout le chemin des packages � chaque fois.
    Exemple, si tu utilises la classe MaClass contenue dans le package MonJar.MonPackage1.MonSousPackage1, soit tu te tapes:
    Code:
    ... new MonJar.MonPackage1.MonSousPackage1.MaClass()

    � chaque fois que tu en as besoin, soit:
    Code:
    import MonJar.MonPackage1.MonSousPackage1.MaClass;
    ...
    ...
    ... new MaClass()
    Merci plegat... mais �a, je le savais d�j�...

    Le probl�me (� moins que je ne sois � c�t� de la plaque) vient du fait qu'Eclipse n'arriverait pas � reconnaitre une classe qui est dans un package par d�faut lors d'un import ou d'une r�f�rence � un autre projet (cf le lien que j'ai envoy�, le sujet du message et qques tests persos.)

    Donc, n'arrivant pas � importer dans les sources une classe contenue dans un package par defaut lui m�me contenu dans un .jar ajout� au classpath (tu me suis), j'en conclu une solution qui est de modifier les classes pour utiliser un vrai nom de package...

    Ce n'est �videmment pas le but du TP, mais �a fait toujours une petite exp�rience en d�compilation (un truc toujours utile dans la vie d'un informaticien )

  13. #13
    Expert confirm�

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 819
    D�tails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Fabricant et casseur d'avions
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 819
    Par d�faut
    Citation Envoy� par vincent63
    Merci plegat... mais �a, je le savais d�j�...

    Le probl�me (� moins que je ne sois � c�t� de la plaque) vient du fait qu'Eclipse n'arriverait pas � reconnaitre une classe qui est dans un package par d�faut lors d'un import ou d'une r�f�rence � un autre projet (cf le lien que j'ai envoy�, le sujet du message et qques tests persos.)
    Ok, autant pour moi!
    En fait ce n'est pas une limitation d'Eclipse, mais de Java (les puristes me reprendront si je dis des boulettes).
    Les packages servent, en plus de ce que j'ai dit pr�c�demment, � assurer �galement l'unicit� des noms de classes.
    Et Java interdit l'importation des classes du package par d�faut (au sens d'Eclipse, le package non-nomm� en t�te de projet), car alors cela risquerait d'avoir deux classes portant le m�me nom (la classe MaClasse du package par d�faut, et la classe MaClasse du package courant). Evidemment, ce probl�me ne se pose pas lorsque l'on code tout dans le package par d�faut, vu qu'� ce moment le package par d�faut est le package courant...

    Citation Envoy� par vincent63
    Donc, n'arrivant pas � importer dans les sources une classe contenue dans un package par defaut lui m�me contenu dans un .jar ajout� au classpath (tu me suis), j'en conclu une solution qui est de modifier les classes pour utiliser un vrai nom de package...
    C'est une des solutions.
    L'autre consiste � tout mettre dans le package par d�faut, donc, MoRpHoGeLL, � virer ton:

    en d�but de classe (ou � mettre ta classe dans le package par d�faut de ton projet).

    Citation Envoy� par vincent63
    Ce n'est �videmment pas le but du TP, mais �a fait toujours une petite exp�rience en d�compilation (un truc toujours utile dans la vie d'un informaticien )
    Exp�rience toujours utile, mais l�, �a va �tre d�licat, en rendant sa copie, de dire � son prof "J'ai refait votre Jar, vous l'aviez organis� n'importe comment!"
    Cela dit, rien n'emp�che de faire la remarque... diplomatiquement... �a peut toujours influer en positif de faire des remarques constructives en TP.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  14. #14
    Invit�
    Invit�(e)
    Par d�faut
    merci beaucoup !!

    mon probl�me est r�solu !!

    il fallait bien tout mettre dans le package par d�faut...

  15. #15
    Membre chevronn� Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par d�faut
    Et un ptit tag r�solu !

  16. #16
    Membre exp�riment� Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par d�faut
    En fait ce n'est pas une limitation d'Eclipse, mais de Java (les puristes me reprendront si je dis des boulettes).
    Les packages servent, en plus de ce que j'ai dit pr�c�demment, � assurer �galement l'unicit� des noms de classes.
    Et Java interdit l'importation des classes du package par d�faut (au sens d'Eclipse, le package non-nomm� en t�te de projet), car alors cela risquerait d'avoir deux classes portant le m�me nom (la classe MaClasse du package par d�faut, et la classe MaClasse du package courant). Evidemment, ce probl�me ne se pose pas lorsque l'on code tout dans le package par d�faut, vu qu'� ce moment le package par d�faut est le package courant...
    Oui, en fait cela semble assez logique, j'aurai d� y penser ... bien vu...

    Exp�rience toujours utile, mais l�, �a va �tre d�licat, en rendant sa copie, de dire � son prof "J'ai refait votre Jar, vous l'aviez organis� n'importe comment!"
    C'est surement � cause de ce genre de phrase que j'ai toujours eu de sales notes en tp...

    J'ai appris deux trucs aujourd'hui
    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Probl�me pour int�grer WTP dans eclipse
    Par bourriquet_42 dans le forum Eclipse
    R�ponses: 4
    Dernier message: 07/11/2008, 15h25
  2. Erreur de PATH dans ECLIPSE ?
    Par a028762 dans le forum Eclipse PHP
    R�ponses: 2
    Dernier message: 10/01/2008, 21h45
  3. [XSLT][d�butant] Probl�me xsl:value-of dans xsl:for-each
    Par Choubie dans le forum XSL/XSLT/XPATH
    R�ponses: 3
    Dernier message: 09/05/2007, 16h30
  4. build path sous Eclipse Maven
    Par babalastar dans le forum Maven
    R�ponses: 1
    Dernier message: 11/01/2007, 09h51
  5. [D�butant][php] IDE pour PHP dans Eclipse ?
    Par folsen dans le forum Eclipse Java
    R�ponses: 1
    Dernier message: 22/04/2004, 16h25

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