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

Maven Java Discussion :

[Maven2] Héritage d'un grand parent


Sujet :

Maven Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Par défaut [Maven2] Héritage d'un grand parent
    Bojour,

    Est ce que dans Maven2, un fichier pom.xml peut avoir un 'grand-parent' ?
    Comme Arborescence j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    +-pFinal
    |
    +pB
       |
       +-Source
            |
            +Common
            +Runtime
    j'ai mon fichier pom.xml 'Grand parent' qui se trouve dans le dossier pFinal

    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
     
    <project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.testProject.test</groupId>
    <artifactId>testFinal</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
     
     
    <dependencies>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
      </dependency>
    </dependencies> 
     
    <modules>
    	<module>../pB</module>
    </modules>
     
    </project>
    Ensuite mon fichier pom.xml qui se trouve dans le dossier pB
    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
    24
    25
     
    <project>
    <modelVersion>4.0.0</modelVersion>
     
    <parent>
    <groupId>com.testProject.test</groupId>
    <artifactId>testFinal</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pFinal/pom.xml</relativePath>
    </parent>
     
    <groupId>com.testProject.test</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>testB</artifactId>
     
     
    <packaging>pom</packaging>
    <name>Project PB</name>
    <url>http://maven.apache.org</url>
     
    <modules>
    	<module>source/common</module>
    </modules>
     
    </project>
    Et pour finir le fichier pom.xml qui se trouve dans source/common
    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
    24
    <project>
    <modelVersion>4.0.0</modelVersion>
    
    <parent>
    <groupId>com.testProject.world</groupId>
    <artifactId>testB</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../../pom.xml</relativePath>
    </parent>
    
    <groupId>com.testProject.test</groupId>
    <version>1.0-SNAPSHOT</version>
    <artifactId>source-Common</artifactId>
    
    
    <packaging>jar</packaging>
    <name>Project source-common</name>
    
    <build>
    	<sourceDirectory>./</sourceDirectory>
    </build>
    
    </project>
    Ce qui est bizarre, c'est que cela fonctionne à certains points, mais pas à d'autres. Ainsi si je vais me placer dans pFinal et je fait un mvn -compile, les sources qui se trouvent dans pB/source/common sont bien compilées, pas de problème.
    Et un mvn help:effective-pom me donne le fichier pom.xml effectif de :
    -pFinal/
    -pB/
    -pB/source/common

    Si j'essaie d'exécuter la commande mvn help:effective-pom depuis pB/, j'ai droit à l'erreur suivante :
    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
     
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [ERROR] FATAL ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Failed to resolve artifact.
     
    GroupId: com.testProject.test
    ArtifactId: testFinal
    Version: 1.0-SNAPSHOT
     
    Reason: Unable to download the artifact from any repository
     
      com.testProject.test:testFinal:pom:1.0-SNAPSHOT
     
    from the specified remote repositories:
      central (http://repo1.maven.org/maven2)
    J'obtient la même erreur quand j'effectue un mvn -compile.
    Ce que je ne comprends pas, c'est que la commande pour voir le pom effectif fonctionne une fois que j'ai elimié le tage <module> dans le pom.xml de pB/

    Et en ce qui concerne pB/source/common, depuis ce dossier je peux faire un mvn compile, cela fonctionne sans aucun problème. Et le plus étrange, c'est que si je fait un mvn help:effective-pom, et bien j'obtient bien mon pom.xml effectif avec la dépendance Junit qui a été déclaré dans le pom grand-parent!

    Mais pourquoi est ce que toute commande foire au niveau du parent intermédiaire? Je ne comprends pas pourquoi il tente de chercher le projet parent dans le repository

    A savoir que je me suis inspiré du livre 'Better Build with Maven'; Où ils utilisent également un pom grand parent (exemple avec Proficio)

  2. #2
    Membre chevronné

    Inscrit en
    Septembre 2006
    Messages
    466
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 466
    Par défaut
    J'ai trois remarques :

    1. je ne vois pas vraiment à quoi te sert le répertoire source (puisque tu n'a pas de pom.xml) mais ce n'est pas très important ;

    2. concernant ton pom.xml qui se trouve dans le dossier source/common, il semble y avoir une erreur (tu as du faire un mauvais copier/coller)...
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
       
      <parent>
      <groupId>com.testProject.world</groupId>
      <artifactId>testB</artifactId>
      <version>1.0-SNAPSHOT</version>
      <relativePath>../../pom.xml</relativePath>
      </parent>
      le groupId doit être com.testProject.test (cf. pom.xml qui se trouve dans le dossier pB). ;

    3. Généralement, il faut toujours faire attention et utiliser le moins possible les chemins relatifs. Je te conseille donc de supprimer tes chemins relatifs dans la section parent de tes poms et d'installer les poms parent sur ton repository locale. Un mvn install sur le projet pFinal devrait faire l'affaire.


    Rémy

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    De manière générale, il est toujours préférable de lancer maven comme ceci:

    ainsi, les répertoires générés lors de la compilation, tests... sont néttoyés ce qui évite toute erreur due à un vieux fichier qui resterait et les poms/artifacts sont installés dans le repository local

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Par défaut
    Ok si je fait un mvn clean install depuis pFinal qui est donc le root. Je retrouve tout dans le repository local, et tout se compile. Tout fonctionne.

    Et une fois que j'ai fait une install depuis pFinal, je peux également effectuer les commandes depuis pB. Mvn help:effective-pom fonctionne !

    Donc le 'double héritage' fonctionne.
    SI j'ai bien compris, lorsque j'essaie de faire help:effective-pom ou compile depuis Pb sans avoir fait de mvn install dans pFinal, il ne trouve pas le parent pFinal.
    Il va donc voir dans le respository (où il les trouve, une fois que le install a été effectué).

    Pourtant mes chemins relatifs sont corrects! Je ne comprends donc pas pourquoi le parent de pB n'est pas trouvé?

    La chose que j'essaie de faire, c'est de pouvoir faire un install de pB sans avoir fait de install dans pFinal. C'est possible ?

    Sinon 2 questions à part :
    1. Dans quel interet Maven cree un jar dans le Local Repository ET dans le target ? Car finallement, lors d'une dépendance, ce sera le jar du repository qui sera utilisé.

    2. Y a t'il moyen depuis maven (en ligne de commande) de supprimer tout ce qui a été placé dans le repository local lors de l'install ?

    Merci.
    Désolé pour toutes ces questions

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Citation Envoyé par Palmer
    1. Dans quel interet Maven cree un jar dans le Local Repository ET dans le target ? Car finallement, lors d'une dépendance, ce sera le jar du repository qui sera utilisé.
    maven prepare tout dans le target et ensuite fait un copie dans le repository local. Il est nécessaire de le créer d'abord dans le target, ainsi si d'autres plugins veulent l'utiliser, ils peuvent le faire

    Citation Envoyé par Palmer
    2. Y a t'il moyen depuis maven (en ligne de commande) de supprimer tout ce qui a été placé dans le repository local lors de l'install ?
    Pour quoi faire?
    depuis maven, mais en ligne de commande oui, avec un "rm -rf" ou un format
    Je ne vois pas l'intérêt de supprimer son contenu, car avec le local repo, les jars sont centralisé et ton IDE les utilisent.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Par défaut
    Bonjour,

    Personne n'aurait une idée pourquoi maven ne trouve pas le parent de pB?
    maven va voir sur le repository local pour le trouver, ce qui fait que je suis forcé de faire un install depuis pFinal.

    Pour les chemins relatifs sont exacts, car si je mets les modules en commentaires dans pB, et ensuite je fait un mvn help:effective-pom ca fonctione! Donc en gros c'est les <modules> qui feraient planter le bazar? je ne vois pas trop le rapport...

    j'ai essayé de faire avec un arriere grand parent, impossible d'executer quoi que ce soit de tout parent intermédiaire! Il va le chercher sur le repository local. Alors que quand je vérifier dans le dernier fils, eh bien je remarque que l'heritage a bien fonctionné...


    edit :
    Voilà ce que l'obtient quand j'utilise l'option debug :
    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
     
    [DEBUG] Building Maven user-level plugin registry from: 'D:\Dokumente und Einstellungen\qjo\.m2\plugin-registry.xml'
     
    [DEBUG] Building Maven global-level plugin registry from: 'C:\maven-2.0.4\bin\..\conf\plugin-registry.xml'
    [INFO] Scanning for projects...
     
    [DEBUG] Searching for parent-POM: com.testProject.test:testFinal::1.0-SNAPSHOT of project: com.testProject.test:testB:pom:1.0-SNAPSHOT in relative path: ../pFinal/pom.xml
    [DEBUG] Using parent-POM from the project hierarchy at: '../pFinal/pom.xml' for project: com.testProject.test:testB:pom:1.0-SNAPSHOT
     
    [DEBUG] Retrieving parent-POM: com.testProject.test:testFinal::1.0-SNAPSHOT for project: com.testProject.test:testB:pom:1.0-SNAPSHOT from the repository.
     
    [DEBUG] Skipping disabled repository central
    [DEBUG] testFinal: using locally installed snapshot
    [DEBUG] Skipping disabled repository central
     
    [INFO] ------------------------------------------------------------------------
    [ERROR] FATAL ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Failed to resolve artifact.
    ...
    Il trouve donc bien le Pom parent, mais pq il va tout de même le chercher sur le respository...? C'est très étrange

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Par défaut Install obligatoire?
    Citation Envoyé par evenisse
    maven prepare tout dans le target et ensuite fait un copie dans le repository local. Il est nécessaire de le créer d'abord dans le target, ainsi si d'autres plugins veulent l'utiliser, ils peuvent le faire
    Prenons un exemple de projet multi-module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    mvn/
         |___pom.xml
         |
         |___core/
                |
                pom.xml
                src/
         |
         |___web/
                |
                pom.xml
                src/
    Si je veux faire un jetty:run sur le module web, il faut obligatoirement avoir fait install sur le module core. Pourquoi Maven n'est-il pas capable d'utiliser les classes du "reactor"?
    Après tout je veux pouvoir tester que les relations entre projets fonctionnent avant de les valider (i.e. installer dans mon repository)


    Sans aller jusque là (jetty), je me dit intuitivement que même un simple "mvn test" au niveau du module web devrait marcher. Oui mais non (Failed to resolved artifact -> core:jar:1.0-SNAPSHOT).

Discussions similaires

  1. Stopper l'héritage onclick sur le parent
    Par rollergirl dans le forum jQuery
    Réponses: 5
    Dernier message: 29/03/2012, 16h23
  2. Programmation Java pour les enfants, les parents et les grands-parents
    Par imaintsoanala dans le forum Général Java
    Réponses: 1
    Dernier message: 25/01/2011, 13h08
  3. [DOM] Modification du style en fonction du grand-parent ?!
    Par ghohm dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 03/07/2007, 15h50
  4. [JOptionPane] connaitre l'instance "grand"-parente
    Par koolway dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/04/2006, 10h37

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