Maven: Site/Artefakt Deployment in lokales Verzeichnis
Java August 15th, 2008Maven (bzw. Maven2) verfügt bekanntlich über expliziten Support für Module, die sich sehr einfach über ein parent pom konfigurieren lassen.
Sehr häufig findet sich in Foren und Newsgroups das „Problem“ dass das mvn site
Kommando eine „falsche“ Verlinkung erzeugt. Das ist nicht ganz richtig – die Verlinkung stimmt, sobald man die Seite auch „deployt“, also in das endgültige Verzeichnis (auf einem Webserver) befördert.
Maven unterstützt automatisches deployment mit verschiedenen Transfermethoden, z.B. webdav oder scp. Hat man jedoch – aus welchen Gründen auch immer – grad keine externe Webseite zur Hand, oder möchte „nur mal gucken“, so bietet sich ein lokales deployment an. (Oder ein mvn site:stage -DstagingDirectory=… )
Dafür existiert die Möglichkeit, im distributionManagement des Maven POM (oder Parent POM) auch eine file URL anzugeben. Leider erwartet diese einen absoluten Pfad, wie man der Maven Dokumentation entnimmt.
Stefan Reuter brachte mich dann auf die gute Idee, den Pfad über die Variable ${user.dir} zu konfigurieren. Damit ist man die absoluten Pfade los, und einigermaßen Plattformunabhängig. (Der Output wird dann relativ zum aktuellen Arbeitsverzeichnis angelegt.)
Der entsprechende Eintrag im Maven POM zum lokalen deployment könnte dann so aussehen:
<distributionManagement>
<repository>
<id>file-repository</id>
<name>Local Repository</name>
<url>file://${user.dir}/target/deploy/repository</url>
</repository>
<site>
<id>local-site</id>
<name>Local deployed site</name>
<url>file://${user.dir}/target/deploy/site</url>
</site>
</distributionManagement>
Anschließend reicht ein mvn site-deploy
bzw. mvn site:site site:deploy
. Natürlich kann man diese Konfiguration noch mit Profilen konfigurieren, doch bietet sich dann eher mvn site:site site:stage
mit -DstagingDirectory
an, als ein Maven Profil für lokales Deployment anzulegen.
November 19th, 2009 at 10:26
Hallo,
wer bereits ein Multi-Module-Deployment auf eine Windows-Netzfreigabe versuchen hat und sich die Zähne an den Slashes ausgebissen hat, sollte einmal folgende Variante versuchen:
file:////\\host/versteckteFreigabe$/services/http/myprojectsite
file:////\\host/normaleFreigabe/services/http/myprojectsite
Diese Notation versteht zumindest Maven in Version 2.0.9.