maven-Site für mehrere Module
-
12-11-2019 - |
Frage
Ich habe ein Maven-Projekt mit vielen Untermodulen und verwende übergeordnetes pom, um die Plugins im Verzeichnis wie folgt zu steuern
-pom.xml (parent pom)
+- submodule1
+- submodule2
+- src\site\site.xml
daher src\site\site.xml
enthält das angepasste Menü wie unten
<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>
Nachdem ich gelaufen bin mvn site:stage
in root (vorgeschlagen von maven-Site-Plugin), die übergeordnete Webseite ist in Ordnung, während die <sub-modules>\index.html
enthält kein Menü (keine Projektinfo & Projektbericht)
Auch merke ich, wenn ich renne mvn site
unter Untermodule der Index.html enthält links kein Menü, während das einzelne HTML in einem Verzeichnis wie pmd vorhanden ist.html, Lizenz.HTML
- Muss ich hinzufügen
src\site\site.xml
in jedem Untermodul oder auf andere bessere Weise? - oder habe ich etwas Dummes gemacht
pom.xml
irgendwo ?
Irgendwelche Hinweise ?
[update] mag auch für Bannerbild, wenn ich in Eltern so setze
<bannerLeft>
<name>edcp</name>
<src>images/mylogo.png</src>
</bannerLeft>
Die Site für das Untermodul mit Hinweisen in die falsche Richtung in HTML sieht folgendermaßen aus ..\..\<submodule>
, nicht ..\images\mylogo.png
Lösung
Wenn Sie das Kopieren der Site vermeiden möchten.xml zu jedem Submodul manuell, dann mit dem maven-Ressourcen-plugin könnte ein Workaround sein:Fügen Sie dies Ihrem Eltern-Pom hinzu:
[...]
<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>
und das zu jedem Ihrer Submodul-Poms:
<properties>
<site.basedir>${project.parent.basedir}</site.basedir>
</properties>
Anschließend wird der Site-Deskriptor vom übergeordneten Projekt in jedes Submodul kopiert (wobei vorhandene Deskriptoren überschrieben werden), bevor die Site-Dokumentation erstellt wird.Bitte beachten Sie, dass das Verzeichnis src /site in jedem Submodul vorhanden sein muss, damit dies funktioniert.Keine perfekte Lösung, aber vielleicht besser als eine vollständige manuelle.
Andere Tipps
Es ist möglich, Menüs vom übergeordneten Element zu erben site.xml
durch die Verwendung der inherit
Attribut.
Z.B,
<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>
Nun sind sowohl die Overview
und Development
menüs werden von allen Unterprojekten geerbt.
Weitere Informationen finden Sie in der Maven-Dokumentation für Websites mit mehreren Modulen, http://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html#Inheritance
Ich bin darüber gestolpert, als ich versucht habe, eine Maven-Site mit mehreren Modulen zu erstellen, und wollte nur eine Lösung teilen, die ich mir ausgedacht habe.
Fügen Sie in Ihrem übergeordneten Pom hinzu
<siteDirectory>${session.executionRootDirectory}/src/site</siteDirectory>
zur Konfiguration des Maven Site Plugins.
Das sollte allen untergeordneten Poms sagen, dass sie ihre Site bekommen sollen.xml aus dem übergeordneten Verzeichnis.
Ich verwende ein kleines Python-Skript, das alle erstellt site.xml
dateien aus einer Vorlage. Hier ist das Wesentliche.