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 :

[SITE] Conceptualiser un site multi modules.


Sujet :

Maven Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 36
    Points : 32
    Points
    32
    Par défaut [SITE] Conceptualiser un site multi modules.
    Bonjour à tous,

    Cela fait quelque temps maintenant que j'utilise Maven, mais je ne me suis que récemment intéressé à la génération de site (aspect documentation) qu'il proposait. J'ai donc commencé simplement la génération de site avec des petits projets. Là pas de souci, la documentation est clair, les plugins simples à utiliser et pour les zones d'ombre, la FAQ du coin sort l'éclairage 1000W.

    Je souhaite maintenant générer un site pour un projet que je découpe en plusieurs modules. Là techniquement ça n'est pas beaucoup plus compliqué, mais c'est sur la conceptualisation de la chose que je souffre un peu :

    Prenons un exemple. Un projet que je compose en 2 parties :
    - Une partie "core" qui contiendra la couche service et modèle (jar)
    - Une partie "web" qui contiendra la couche vue (war)

    J'ai donc à faire à 1 Projet constitué de 2 Modules.
    Il m'intéresse d'avoir pour chaque module une listes de rapports (les plus usuels) et pour l'ensemble du projet une section de documentation pour aider les développeurs.

    Pour les rapports, cette notion intervenant au niveau de chaque module, je ne pense pas me tromper en ajoutant les informations nécessaires à leur génération dans les POM de "core" et "web".

    Maintenant pour le site du projet en lui même, j'ai plus de doute.
    Le site est il un module en lui même ? J'ai bien l'impression que oui.
    Je crée donc un nouveau module :
    - Une partie "site" qui contiendra la documentation du projet.

    Comme il s'agit du site du projet et donc la partie qui englobe les modules, je serait tenté de faire de ce module le parent des 2 autres. Mais là je commence à faire de sérieux noeuds avec mon cerveau. En fait ça dépend de l'humeur, je n'arrive pas à me décider.

    Bref, en admettant le point précédent, je me retrouve avec la structure 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
     
    monprojet
        |
        |
        ----- site
        |         |
        |         ----- pom.xml (POM)
        |
        ----- core
        |         |
        |         ----- pom.xml (JAR)
        |
        ----- web
                   |
                   ----- pom.xml (JAR)
    Je souhaite maintenant savoir si les personnes gérants des sites multi-modules utilise cette approche (structure FLAT) ou quelque chose de sensiblement différent. Cette structure me convient particulièrement pour l'intégration de ces 3 modules dans Eclipse ainsi que pour la gestion de l'archivage, par contre elle me paraît moins adaptée pour des solutions comme Continuum.

    Je n'ai pas trouvé d'élément de réponse dans la documentation de maven ni dans la FAQ, donc si vous pouvez me faire part de votre retour d'expérience vous aurez fait au moins un heureux .

    Bonne fin de journée

    Steph

  2. #2
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut [SITE] Conceptualiser un site multi modules.
    ça ne fontionne pas vraiment de cette manière :

    tu as plutôt cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    monprojet
        |
        |
        ----- pom.xml (POM)
        |
        ----- core
        |         |
        |         ----- pom.xml (JAR)
        |
        ----- web
                   |
                   ----- pom.xml (JAR)
    ton 1er POM est le POm de ton projet dans lequel tu déclares tes 2 modules core et web

    Dedans, tu créés une section <reporting> avec tous les rapports et notamment javadoc comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-javadoc-plugin</artifactId>
    	<configuration>
    		<aggregate>true</aggregate>
    	</configuration>
    </plugin>
    ce qui te permet d'avoir toute ta javadoc au plus haut niveau

    ensuite tu fais un mvn:site

    et le site sera généré pour le projet "monprojet" et ensuite pour chaque sous-projet dans le répertoire "target/site" de chaque projet ou sous-modules , avec des liens de "monprojet" vers tes sous-projets dans la section modules.

    mais avec mvn:site les liens ne focntionneront pas.

    [CODE]
    tu as plutôt cela :
    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
    26
     
     
    monprojet
        |
        |
        |---- pom.xml (POM)
        |---- target
        |          |
        |          |-- site
        |                 |--index.html
        |
        ----- core
        |         |
        |         |---- pom.xml (JAR)
        |         |---- target
        |                    |
        |                    |-- site
        |                           |--index.html
        |
        ----- web
        |          |
        |          |---- pom.xml (JAR)
        |          |---- target
        |                    |
        |                    |-- site
        |                           |--index.html
    Pour cela, tu fais : mvn site:stage -DstagingDirectory=c:\temp

    dans ce cas, tu auras un vrai site :
    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
     
    monprojet
        |
        |
        |---- index.html
        |---- project-info.html
        |---- ....
        |
        ----- core
        |        |
        |        |---- index.html
        |        |---- project-info.html
        |
        ----- web
                    |
                    |---- index.html
                    |---- project-info.html
    et voilà , j'espere avoir été clair

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par david.vicente@tiscali.fr
    et voilà , j'espere avoir été clair
    Je trouve oui , c'est très clair. Juste 2 questions :

    1) L'aggregation ne fonctionne pas pour la génération d'une JavaDoc de haut niveau, il ne trouve pas les classes dont dépendent mes modules (exemple Hibernate). Alors que cela fonctionne si je ne fais pas l'aggregation. Je ne trouve pas d'info sur ce problème dans le plugin. Une idée ?

    2) A quel endroit introduirions nous la partie "documentation" du site ?

    Dans chaque modules ?
    En ajoutant /src/site dans chaque modules

    Au niveau Parent ?
    En ajoutant /src/site à la racine du projet ?

    Evidemment, je souhaite avoir le plus d'info sur la première page du site, mais je ne suis pas pour la seconde solution qui viens perturber mon environnement projet sous Eclipse. Pour modifier le site je dois y ajouter le projet racine (pas très propre).

    Par documentation, j'entends la structure que l'on peu trouver sous /src/site : site.xml, des fichiers apt, etc.

    Encore merci pour ton exemple

  4. #4
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut [SITE] Conceptualiser un site multi modules
    je ne comprends pas trés bien tes 2 questions.

    1) tu n'arrives pas à avoir la javadoc de tes classes générées par Hibernate ?

    2) as-tu lu cette section :

    http://maven.apache.org/plugins/mave...escriptor.html

    en fait ça dépend de ce que tu veux faire car en fonction des besoins tu vas devoir avoir un src/site/site.xml dans chaque projet, y compris le super-projet.

    Qu'est-ce que tu entends par perturber mon environnement eclipse ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par david.vicente@tiscali.fr
    1) tu n'arrives pas à avoir la javadoc de tes classes générées par Hibernate ?
    Maven lance une Exception lorsque qu'il génère la documentation d'une de mes classes qui importe une classe d'une dépendance (Hibernate est un exemple, ça fait ça avec n'importe quelle dépendance.)

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    d:/Projects/perso/test/test-core/src/main/java/net/test/core/dao/hibernate/UserDaoImpl.java:17:cannot find symbol
    symbol: class HibernateDaoSupport
    public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    La classe HibernateDaoSupport fait partie de Spring, la dépendance est bien présente dans le POM du module "core", le projet compile, les tests sont OK et l'appli fonctionne, mais la documentation du module "core" n'est pas générée lorsque j'active l'aggrégation à cause de l'erreur ci dessus. Lorsque l'aggrégation n'est pas activé, la documentation est bien générée et présente sur le site du module "core".

    J'espère être plus clair.

    Citation Envoyé par david.vicente@tiscali.fr
    Oui j'ai lu cette section

    Citation Envoyé par david.vicente@tiscali.fr
    en fait ça dépend de ce que tu veux faire car en fonction des besoins tu vas devoir avoir un src/site/site.xml dans chaque projet, y compris le super-projet.

    Qu'est-ce que tu entends par perturber mon environnement eclipse ?
    Oui, je n'ai pas été très limpide là. En fait ce qui me dérange, c'est que pour modifier mon site avec Eclipse (le cas ou j'ajoute /src/site à la racine), je suis obligé de l'importer en temps que projet (Obligé, non, mais c'est plus pratique). Or, si j'importe directement le projet parent, je retrouve les modules enfants en dessous alors qu'eux même sont déjà des projets sous Eclipse.
    Eclipse ne gère pas les structure Hierarchique pour les projets, seulement les structures à plat, c'est pourquoi j'étais partie sur l'idée que le site soit un module comme "web" ou "core".

    Enfin là je chipote, et je pense que la grosse partie de la documentation sera dans chaque module, donc ce point n'est pas trop problématique

    Encore Merci

    Steph

  6. #6
    Membre actif Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Points : 226
    Points
    226
    Par défaut [SITE] Conceptualiser un site multi modules.
    Si tu veux faire ça sans modifier ta structure existante , tu peux faire cela :

    tu créés un projet site avec un POM ou tu déclares toutes tes dépendances et notamment Hibernate.

    tu déclares une section reporting avec tous tes rapports et le javadoc comme je l'ai mis plus tôt.

    ensuite tu déclares tes modules comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <modules>
    	<module>../core</module>
    	<module>../web</module>
    <modules>
    ensuite dans chacun des POM (core et web), tu définis comme parent , le POM de ton projet site
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      <parent>
        <artifactId>site</artifactId>
        <groupId>xxxx.xxxx.xxxx</groupId>
        <version>1.0</version>
      </parent>
    tu fais un mvn install pour installer ton POM "site" dans ton repo local

    et ensuite tu pex faire un mvn:site directement à la racine du projet site et ça devrait aller sans modifier l'existant

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Ok, je testerai cette possibilité également.
    Je verrai à l'usage celle que je trouve la plus intuitive.

    Merci pour ton aide.

  8. #8
    Membre habitué Avatar de DanielW33
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mai 2006
    Messages : 327
    Points : 164
    Points
    164
    Par défaut
    Bonjour a vous,
    je reviens sur ce probleme de generation de site pour des projets mutli-module en structure flat

    J'ai un projet de structure flat, avec une config comme suis
    Citation Envoyé par dvicente72
    tu déclares tes modules comme suit:
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <modules>
    	<module>../core</module>
    	<module>../web</module>
    <modules>
    ensuite dans chacun des POM (core et web), tu définis comme parent , le POM de ton projet site
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     <parent>
        <artifactId>site</artifactId>
        <groupId>xxxx.xxxx.xxxx</groupId>
        <version>1.0</version>
      </parent>
    tu fais un mvn install pour installer ton POM "site" dans ton repo local
    lorsque je lance la commande "mvn site-deploy" en local tout fonctionne sans probleme
    Mais lorsque je laisse le buid automatique de Continuum faire ce build : ERROR il me dis la chose 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [ERROR] FATAL ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Error building POM (may not be this project's POM).
     
     
    Project ID: unknown
     
    Reason: Could not find the model file '/opt/maestro/1.3.1/project-server/data/continuum/working-directory/monProjet/pom.xml'. for project unknown
     
     
    [INFO] ------------------------------------------------------------------------
    [INFO] Trace
    org.apache.maven.reactor.MavenExecutionException: Could not find the model file '/opt/maestro/1.3.1/project-server/data/continuum/working-directory/monProjet/pom.xml'. for project unknown
    	at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:378)
    	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:290)
    	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:125)
    	at org.apache.maven.cli.MavenCli.main(MavenCli.java:280)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
    	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
    	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
    	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
    Caused by: org.apache.maven.project.ProjectBuildingException: Could not find the model file '/opt/maestro/1.3.1/project-server/data/continuum/working-directory/monProjet/pom.xml'. for project unknown
    	at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1383)
    	at org.apache.maven.project.DefaultMavenProjectBuilder.buildFromSourceFileInternal(DefaultMavenProjectBuilder.java:477)
    	at org.apache.maven.project.DefaultMavenProjectBuilder.build(DefaultMavenProjectBuilder.java:200)
    	at org.apache.maven.DefaultMaven.getProject(DefaultMaven.java:553)
    	at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:467)
    	at org.apache.maven.DefaultMaven.collectProjects(DefaultMaven.java:527)
    	at org.apache.maven.DefaultMaven.getProjects(DefaultMaven.java:364)
    	... 11 more
    Caused by: java.io.FileNotFoundException: /opt/maestro/1.3.1/project-server/data/continuum/working-directory/monProjet/pom.xml (No such file or directory)
    	at java.io.FileInputStream.open(Native Method)
    	at java.io.FileInputStream.<init>(FileInputStream.java:106)
    	at java.io.FileReader.<init>(FileReader.java:55)
    	at org.apache.maven.project.DefaultMavenProjectBuilder.readModel(DefaultMavenProjectBuilder.java:1378)
    	... 17 more
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: < 1 second
    [INFO] Finished at: Mon Oct 29 13:24:20 GMT+01:00 2007
    [INFO] Final Memory: 1M/4M
    [INFO] ------------------------------------------------------------------------
    Ce probleme est identifie puisque Continuum gere ses projets par des 'ID' et donc les chemins relatifs ne sont plus correct ( <module>../moduleA</module> ... )

    Y a t'il un moyen de remerdier a ce probleme sur continuum ??

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

Discussions similaires

  1. 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
  2. Réponses: 5
    Dernier message: 14/08/2009, 13h23
  3. "inherit" sur le site d'un projet multi-modules
    Par PurpleOwl dans le forum Maven
    Réponses: 2
    Dernier message: 30/04/2008, 15h48
  4. [Cobertura] [Maven] Rapport en mode site ou multi-modules
    Par lbroudoux dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/08/2007, 16h33
  5. [maven2] génération de site multi modules
    Par jpalcluc dans le forum Maven
    Réponses: 11
    Dernier message: 25/07/2007, 16h02

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