Multi-Modul Maven Projekt und Steg: run
-
30-09-2019 - |
Frage
Ich versuche, ein Maven WAR-Projekt in zwei Module aufgeteilt, so dass ich eine separate JAR-Datei mit Kommandozeilen-Tool aufbauen kann. Das Ergebnis hat die folgende Struktur:
-
pom.xml
(Verpackungspom
, hat zwei Module) -
project-jar/
-
pom.xml
(Verpackungsjar
)
-
-
project-war/
-
pom.xml
(Verpackungswar
, hängt vonproject-jar
)
-
Wenn ich mvn
Befehle von der Wurzel laufen, funktioniert alles einwandfrei. Ich mag mvn jetty:run
halten verwenden, aber für die ich brauche den Befehl in dem WAR-Teilprojekt auszuführen. Wenn ich das tun, schlägt die project-jar
Teilprojekt zu finden, so dass es nicht läuft. Auch mvn jetty:run-war
mit einer komplett montierten WAR-Datei im Verzeichnis target
fehlschlägt, weil es zuerst versucht zu „bauen“ das Projekt. Ich habe nur geschaffen, es durch die Installation project-jar
in die lokale Maven-Repository funktioniert, was nicht sehr schön ist.
Gibt es eine Möglichkeit, die Jetty Plugin in einer Multi-Modul Maven-Konfiguration zu verwenden?
Lösung
Es gibt keine magische Lösung und das einzige, was ich weiß, ist ein bisschen hacky und verlassen sich auf das Element extraClasspath
, dass Sie Extraklasse Verzeichnisse deklarieren können, relativ. Wie dies (von JETTY-662 ):
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.0.1.v20091125</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<webAppConfig>
<contextPath>/my-context</contextPath>
<extraClasspath>target/classes;../my-jar-dependency/target/classes</extraClasspath>
</webAppConfig>
<scanTargets>
<scanTarget>../my-jar-dependency/target/classes</scanTarget>
</scanTargets>
</configuration>
</plugin>
Andere Tipps
Erstellen Sie ein Profil im Krieg Modul (project-war
). Innerhalb dieses Profils zu konfigurieren, Anlegesteg zu einer Phase des Lebenszyklus befestigen und das run
Ziel explizit ausführen. Nun, wenn Maven läuft aus dem Toplevel-Projekt mit dem Profil aktiviert ist, wird es Anlegestelle aufrufen. Lauf und Schwester Modulabhängigkeits Auflösung haben (wie normal, wenn maven Befehle aus dem Toplevel-Projekt ausgeführt wird)
Die Beispiel-Konfiguration, wenn sie in der pom.xml des Web-Moduls (project-war
) platziert, arrangiert für Anlegestelle: laufen während der test
Phase auszuführen. (Sie können eine andere Phase wählen, aber stellen Sie sicher, dass es nach compile
ist.)
Ausführen von Toplevel: mvn test -Pjetty-run
oder mvn test -DskipTests=true -Pjetty-run
. Dies wird Abhängigkeiten nach Bedarf zusammenstellen und zur Verfügung stellen, aber invoke Anlegesteg. Lief im richtigen Modul
<profiles>
...
<!-- With this profile, jetty will run during the "test" phase -->
<profile>
<id>jetty-run</id>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>7.1.6.v20100715</version>
<configuration>
...
<webAppSourceDirectory>
${project.build.directory}/${project.build.finalName}
</webAppSourceDirectory>
...
</configuration>
<executions>
<execution>
<id>jetty-run</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
...
</profiles>
Mit extraClasspath in Anlegesteg Konfiguration funktioniert ... aber aus irgendeinem Grund, wenn abhängig Gläser (von anderen Modulen) einige Dinge sind veraltet wird nicht korrekt funktionieren.
In Anlegesteg-Plugin an die Wurzel pom und Konfigurieren eines contextHandler auf den gewünschten Krieg zeigt. Dies funktioniert für mich in einem Projekt mit mehreren Glas-Modulen und zwei Overlay-Kriegen.
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.0.M2</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<contextHandlers>
<contextHandler
implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
<war>${project.basedir}/project-war/target/project-war-${project.version}.war</war>
<contextPath>/</contextPath>
</contextHandler>
</contextHandlers>
</configuration>
</plugin>
Ich weiß, Sie fragen Konfiguration für Plugin, aber man konnte nur das Projekt in dem Maven-Befehl definieren:
$ mvn jetty:run --projects project-war