site maven pour multi-modules
-
12-11-2019 - |
Question
J'ai un projet Maven avec beaucoup de sous-modules, et j'utilise des Pom Pom pour contrôler les plugins le répertoire comme ci-dessous
-pom.xml (parent pom)
+- submodule1
+- submodule2
+- src\site\site.xml
Donc src\site\site.xml
Contient le menu personnalisé comme ci-dessous
<project>
....
<body>
<menu name="Overview">
<item name="Introduction" href="introduction.html"/>
</menu>
<menu name="Development">
<item name="Getting started" href="designenv.html"/>
<item name="FAQ" href="designfaq.html" />
<item name="Javadoc" href="apidocs/index.html" />
</menu>
<menu ref="modules"/>
<menu ref="reports"/>
</body>
</project>
Après avoir couru mvn site:stage
en racine (suggéré de Plugin de site Maven), la page Web parent est bien, tandis que le <sub-modules>\index.html
ne contient aucun menu (pas d'informations de projet et de rapport de projet)
Aussi je remarque si je cours mvn site
En vertu des sous-modules, l'index.html ne contient aucun menu à gauche, tandis que le HTML individuel existe dans le répertoire comme pmd.html, licence.html
- Dois-je ajouter
src\site\site.xml
dans chaque sous-module ou autre meilleure façon? - ou ai-je fait quelque chose de stupide
pom.xml
quelque part ?
Des indices?
MISE À JOUR] Aussi à l'image de bannière, si je mets dans des parents comme celui-ci
<bannerLeft>
<name>edcp</name>
<src>images/mylogo.png</src>
</bannerLeft>
Le site de sous-module avec des points dans la mauvaise direction, en html, ressemble à ..\..\<submodule>
, ne pas ..\images\mylogo.png
La solution
Si vous souhaitez éviter de copier le site.xml à chaque sous-mo-module manuellement, alors en utilisant le Maven-Resources-Plugin Cela pourrait être une solution de contournement: ajoutez ceci à votre parent:
[...]
<properties>
<site.basedir>${project.basedir}</site.basedir>
</properties>
[...]
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-sitedescriptor</id>
<!-- fetch site.xml before creating site documentation -->
<phase>pre-site</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/src/site/</outputDirectory>
<resources>
<resource>
<directory>${site.basedir}/src/site/</directory>
<includes>
<include>**/site.xml</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Et ceci à chacun de vos poms sous-module:
<properties>
<site.basedir>${project.parent.basedir}</site.basedir>
</properties>
Ensuite, le descripteur du site sera copié du projet parent à chaque sous-module (écrasant les descripteurs existants) avant la création de la documentation du site. Veuillez noter que le répertoire SRC / Site doit exister dans chaque sous-module pour que cela fonctionne. Pas une solution parfaite, mais peut-être mieux qu'un manuel complet.
Autres conseils
Il est possible d'hériter des menus du parent site.xml
en utilisant le inherit
attribut.
Par exemple,
<project>
....
<body>
<menu name="Overview" inherit="top">
<item name="Introduction" href="introduction.html"/>
</menu>
<menu name="Development" inherit="top">
<item name="Getting started" href="designenv.html"/>
<item name="FAQ" href="designfaq.html" />
<item name="Javadoc" href="apidocs/index.html" />
</menu>
<menu ref="modules"/>
<menu ref="reports"/>
</body>
</project>
Maintenant les deux Overview
et Development
Les menus seront hérités par tous les sous-projets.
Voir la documentation Maven pour les sites multi-modules pour plus de détails,http://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html#inheritance
Je suis tombé sur cela lorsque j'essaie de générer un site Maven multi-modules et je voulais juste partager une solution que je suis venue.
Dans votre parent, ajoutez
<siteDirectory>${session.executionRootDirectory}/src/site</siteDirectory>
à la configuration du plugin du site Maven.
Cela devrait indiquer à tous les enfants de POMS d'obtenir leur site.xml à partir du répertoire parent.
J'utilise un petit script python qui crée tout le site.xml
fichiers d'un modèle. Voici l'essentiel.