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

Langage Java Discussion :

Maven : Cyclic inheritance


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Maven : Cyclic inheritance
    Bonjour à tous,

    J'aimerais avoir l'avis de la communauté concernant le fonctionnement de Maven dans un cas particulier.

    Considérons un projet Maven classique (j'ai volontairement réduit l'ensemble des classes au minimum) :

    Dans le répertoire source src/main/java, j'ai un package com.example et 2 classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package com.example;
     
    import com.example.Class2.Interface1;
     
    public class Class1 implements Interface1 {
     
        public interface Interface2 {
     
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    package com.example;
     
    import com.example.Class1.Interface2;
     
    public class Class2 implements Interface2 {
     
        public interface Interface1 {
     
        }
    }
    Les 2 classes sont fortement liées puisque chacune définie l'interface de l'autre.

    Dans le répertoire source src/test/java, j'ai également un package com.example et 1 classe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    package com.example;
     
    import com.example.Class1.Interface2;
     
    public class MockClass2 implements Interface2 {
     
    }
    Si la compilation sous Eclipse ne pose aucun problème (l'exécution non plus si on implémente quelques méthodes), en revanche, sous Maven, j'obtiens le message suivant :
    [ERROR] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Compilation failure
    C:\Home\Helios\eclipseV4\workspace\CyclicTest\src\test\java\com\example\MockClass2.java:[6,35] cyclic inheritance involving com.example.Class1.Interface2
    Message d'autant plus étonnant que si je copie MockClass2 dans le répertoire source src/main/java, la compilation se passe correctement.

    Quelqu'un a-t-il une idée pour expliquer ce comportement ?

    Merci.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 208
    Points
    208
    Par défaut
    Bonjour,

    J'ai fait un test avec maven 3.0.3 et Java 1.6 et ça ne pose pas de problème.

    Quelle version de maven utilises tu ?
    Je pense que ce genre d'erreur a été effectivement présent dans des versions antérieures de maven.

    Par contre, j'ai toujours utilisé les interfaces pour faire du découplage de classes et ton architecture me laisse perplexe, j'imagine que tu as tes raisons pour faire comme ça, mais je ne t'apprend sûrement pas que le couplage bilatéral est en principe vivement déconseillé dans une architecture saine.

    Cordialement

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Points : 208
    Points
    208
    Par défaut
    Re-bonjour,

    Au temps pour moi, je n'avais pas créé la classe Mock dans test, et j'ai effectivement le même message en lançant les tests avec maven.

    Donc maven semble toujours avoir ce genre de pb en v3.0.3. C'est désagréable, je te l'accorde, mais ça va un peu dans le sens de ce que je dis dans mon post précédent.

    Ceci dit, ce n'est que quand je fait maven "test" que j'ai le problème, la compilation ou l'exec des classes dans main ne posent pas de pb.


    Cordialement.

  4. #4
    Rédacteur/Modérateur
    Avatar de Laurent.B
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    3 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3 468
    Points : 17 036
    Points
    17 036
    Par défaut
    Bonjour,

    Toute dépendance cyclique est à proscrire, il suffit d'extraire les parties que l'on veut référencer dans une autre classe ou interface.
    Responsable FAQ Eclipse | Maintiens et développe un des logiciels destinés aux rédacteurs sur developpez.com
    Gardons toujours à l'esprit que le forum constitue une base documentaire, dont l'utilité et la qualité dépendent du soin apporté à nos questions et nos réponses. Soyons polis, précis (dans le titre et dans le corps des questions), concis, constructifs et faisons de notre mieux pour respecter la langue française et sa grammaire. Merci pour nous (les modérateurs) mais aussi et surtout, merci pour vous.
    Problème solutionné => je vais au bas de la page et je clique sur le bouton (qui suite à mise à jour du forum, a légèrement changé d'aspect).

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    merci pour vos réponses,

    Effectivement, il suffit de sortir l'une des interfaces pour que cela fonctionne.

    Mais le bug m'étonne tout de même, pourquoi le changement de répertoire source met la compilation en erreurs... Bref...

    J'utilisais ce mécanisme pour mettre en place un pattern MVP avec une vue et un presenter interdépendants. (La vue définissant l'interface du presenter et le presenter définissant l'interface de la vue). Ce pattern fonctionne à condition qu'il n'y ait qu'une seule implémentation de chacune des interfaces, ce que l'implémentation d'un mock d'une des 2 interfaces (vue ou presenter) vient corrompre...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/03/2012, 17h16
  2. [Single Table Inheritance] Documentation
    Par seb_asm dans le forum Design Patterns
    Réponses: 2
    Dernier message: 10/03/2005, 13h18
  3. Inherited et Fail
    Par WebPac dans le forum Langage
    Réponses: 12
    Dernier message: 14/09/2004, 13h09
  4. [WSAD][Plugin]Maven
    Par thibaut dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/07/2004, 14h40
  5. [Conception][Factory] Packages inheritance
    Par ludovic.fernandez dans le forum Général Java
    Réponses: 5
    Dernier message: 05/07/2004, 17h02

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