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 :

Génération de l'artefact final dans un projet multimodule


Sujet :

Maven Java

  1. #1
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut Génération de l'artefact final dans un projet multimodule
    Bonjour

    J'ai fait un projet multimodule, en me rérérant à la documentation:
    http://i-proving.ca/space/Technologi...o+Sub-Projects
    http://maven.apache.org/plugins/mave...n/reactor.html

    Au final j'ai quelque chose d'asses compliqué du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    A
    |
    +-- B
    |
    |
    +---C
        |
        +--D
           |
           +--E
    A est un projet J2EE qui ne contient que des fichiers WEB et aucune classe java. B, C, D, E sont des projets java purs. Pour chacun, j'ai mis un packaging pom, sinon la déclaration de sous modules n'est pas possible. Et la question que je me pose est très simple: comment au final je génère mon war qui contient l'ensemble, vu que je suis forcé d'avoir un packaging pom?

    Ca doit être tout con comme question, mais là je sèche un peu .

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Heu, pourquoi faire ça comme ça ?

    Une organisation de ce type me parait beaucoup plus simple :

    project (pom)
    +- A (war)
    +- B (jar)
    +- C (jar)
    +- D (jar)
    J'ai mis entre parenthèse le type de pom associé à chaque niveau. Les dépendances (i.e. A dépend de B, C et D par ex.) se définissent dans le pom.xml des projets.

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Je ne vois pas en quoi c'est plus simple, vu qu'on passe certes d'une arborescence complexe à une arborescence plus simple, sauf qu'on y ajoute des interdépendances artificielles dans les pom. Mais admettons.

    De toute manière le pom du projet global sera de type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <packaging>pom</packaging>
      <modules>
      	<module>../A</module>
      	<module>../B</module>
      </modules>
    Et donc ma question reste la même : je veux générer l'artefact qui correspond au projet global, comment je fais?

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    D'abord, le pom.xml du projet (au niveau racine) aura ça :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <modules>
        <module>A</module>
        <module>B</module>
        <module>C</module>
        <module>D</module>
    </modules>

    Ce pom aura un packaging de type pom, et ce sera le seul dans ce cas. Les autres auront soit war (B, C et D) soit war (A).

    Cela va indiquer à Maven que tu fais une composition de plusieurs modules. Maven analysera ensuite les pom.xml de tous ces modules, et déterminera, grâce aux dépendances inter modules, quelles est l'ordre de construction à suivre. Par exemple, si A dépend de B, Maven buildera d'abord B, puis A.

    Ainsi, il faut que dans le projet A (la webapp) tu indiques dans son pom.xml qu'il a des dépendances avec les autres librairies. Par exemple :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>B</artifactId>
        <version>xxx</version>
    </dependency>
    <dependency>
        <groupId>xxx</groupId>
        <artifactId>C</artifactId>
        <version>xxx</version>
    </dependency>

    Au final, si tu lances la commande mvn clean install au niveau de la racine du projet, Maven va lancer cette commande sur tous les modules, en respectant l'ordre qui sera déterminé grâce aux définition des dépendances.

  5. #5
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Merci beaucoup, ça marche du tonnerre de Zeus!

    Le truc, c'est que j'utilise Eclipse pour le développement, je ne sais pas si d'ordinaire on utilise un autre IDE pour développer sous Maven? En tout cas c'est pour ça que je mets le module avec le pom au même niveau que les autres et que j'utilise des ../ pour les références des autres projets, car sinon je ne vois pas trop comment faire.

    J'ai bien sûr pris également soin de définir manuellement les inclusions de sous projets dans eclipse suivant la hiérarchie de mon premier post, afin qu'il n'y ait pas de soucis de classes non trouvées.

    La question bonus maintenant, c'est comment faire pour déployer le projet packagé en War dans tomcat, si possible en passant par le plugin tomcat d'éclipse. En effet, si à chaque modification dans un projet, il faut attendre que Maven reconstruise le War et le redéploie via le plugin tomcat:redeploy, je suis pas sorti de l'auberge!..

  6. #6
    Membre averti Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par Aldian Voir le message
    Le truc, c'est que j'utilise Eclipse pour le développement, je ne sais pas si d'ordinaire on utilise un autre IDE pour développer sous Maven?
    Il n'y a pas spécialement d'IDE pour utiliser Maven. Maven est un outil de build indépendant des IDE (j'ai utilisé Maven avec Notepad++). C'est juste que tu utilises un plugin (surement m2eclipse) qui te permet d'intégrer dans ton Eclipse un Maven Embedder pour pouvoir lancer des goal sur les projets que tu désires

    Citation Envoyé par Aldian Voir le message
    La question bonus maintenant, c'est comment faire pour déployer le projet packagé en War dans tomcat, si possible en passant par le plugin tomcat d'éclipse. En effet, si à chaque modification dans un projet, il faut attendre que Maven reconstruise le War et le redéploie via le plugin tomcat:redeploy, je suis pas sorti de l'auberge!..
    A ma connaissance (même si je débute dans le domaine ) ce n'est pas possible. Je laisserai les grands gourous infirmer ou pas ce que je dis, mais il me semble que tu doives re-build à chaque fois tout ton projet. Personnellement, je vois en entreprise des build qui durent prêt de 4/5 heures (quand ils sont optimisés) , donc il vaut mieux être sûr que les modifs fonctionnent

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Eh bien si, c'est possible et ça marche (même si ma configuration finale est probablement assez fragile).

    Le truc c'est que dans le contexte où je le fais marcher, j'ai paramètré les dépendances dans éclipse en utilisant les sous projets éclipse. Quand je modifie l'un d'entre eux, le plugin tomcat est assez intelligent pour redéployer. Dans ce contexte, Maven sert juste pour l'inclusion automatique des dépendances, mais c'est a priori Eclipse qui fait le build qui est déployé dans tomcat.

    Tout ça est rendu possible effectivement par le plugin m2eclipse et par ses extras.

    Le revers de la médaille, c'est que le builder d'Eclipse n'est pas aussi malin que celui de Maven pour arbitrer les conflits entre dépendances de sous-projets, et qu'il faut être plus rigoureux.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2009, 13h36
  2. Génération de site dans un projet multi-modules
    Par goldandlink dans le forum Maven
    Réponses: 3
    Dernier message: 20/08/2009, 10h55
  3. file system dans un projet multimodules
    Par ggalou08 dans le forum Maven
    Réponses: 13
    Dernier message: 22/05/2008, 14h56
  4. Réponses: 7
    Dernier message: 24/05/2003, 15h56
  5. Réponses: 6
    Dernier message: 21/06/2002, 14h48

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