Sito di Maven per Multi Module
-
12-11-2019 - |
Domanda
Ho un progetto MAVEN con un sacco di sotto-moduli e utilizzo POM POM per controllare i plug-in della directory come sotto
-pom.xml (parent pom)
+- submodule1
+- submodule2
+- src\site\site.xml
.
Pertanto src\site\site.xml
contiene il menu personalizzato come sotto
<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>
.
Dopo aver eseguito mvn site:stage
in root (suggerito da plugin del sito di Maven ), la pagina Web principale va bene, mentre il <sub-modules>\index.html
non contiene alcun menu (nessuna informazione del progetto e rapporto del progetto)
Soluzione
Se si desidera evitare di copiare il sito.xml a ciascun sottomodulo manualmente, quindi usando il maven-resources-plugin potrebbe essere una soluzione alternativa: aggiungi questo al tuo genitore Pom:
[...]
<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>
.
E questo a ciascuno dei tuoi POMMODULE POMS:
<properties>
<site.basedir>${project.parent.basedir}</site.basedir>
</properties>
.
Quindi il descrittore del sito verrà copiato dal progetto principale a ciascun sottomodulo (sovrascrittura dei descrittori esistenti) prima che venga creato la documentazione del sito.Si noti che la directory SRC / Site deve esistere in ciascun sottomodulo per rendere questo lavoro.Non è una soluzione perfetta, ma forse meglio di un manuale completo.
Altri suggerimenti
È possibile ereditare i menu dal genitore site.xml
utilizzando l'attributo inherit
.
E.G,
<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>
.
Ora sia i menu Overview
e Development
saranno ereditati da tutti i sottogruppi.
Vedere la documentazione MAVEN per i siti multi-module per maggiori dettagli, http://maven.apache.org/plugins/maven-site-plugin / esempi / multimodule.html # ereditance
Mi sono imbattuto in questo modo quando si cerca di generare un sito Multi Module Maven e volevo solo condividere una soluzione con cui ho trovato.
nel tuo genitore POM ADD
<siteDirectory>${session.executionRootDirectory}/src/site</siteDirectory>
.
alla configurazione del plugin del sito di Maven.
Questo dovrebbe dire a tutti i figli Poms di ottenere il loro sito.xml dalla directory principale.
Sto usando un piccolo script Python che crea tutti i file site.xml
da un modello. qui è il GIST .