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 (Verpackungs pom, hat zwei Module)
  • project-jar/
    • pom.xml (Verpackungs jar)
  • project-war/
    • pom.xml (Verpackungs war, hängt von project-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?

War es hilfreich?

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>

http: // eclipse.org/jetty/documentation/current/jetty-maven-plugin.html#running-more-than-one-webapp

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top