Maven: Wie Anlegestelle verwenden: laufen in einem Multi-Modul Maven-Projekt, ohne dass die Installation

StackOverflow https://stackoverflow.com/questions/4371373

Frage

Ich bin neu in Maven. Ich habe eine Multi-Modul-2-Projekt maven, das die folgende Struktur hat (etwas vereinfacht):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...

Ich habe das Web-Modul konfiguriert die Maven Jetty Plugin . Dies funktioniert gut für die Produktion Artefakte zu bauen. Für die Entwicklung, entdeckte ich, dass ich auf Anruf mvn install auf jedem Modul, damit ich ändern, gefolgt von Anlegesteg stoping und ruft Anlegestelle. Laufen wieder
Es wäre viel produktiver sein, wenn es eine Möglichkeit für das Plugin wird direkt von jedem Zielverzeichnissen Änderungen in Kraft des Moduls. Nach der Anlegestelle Plugin Dokumentation scheint ein solches Feature zu sein, aber es scheint, dies gilt nur für die WAR-Modul.
Noch wichtiger ist für mich der Lage sein, Änderungen Dateien Ressource zu machen, ohne die Notwendigkeit zum Neustart Steg. Das ist, weil die meisten Ressourcen sind HTML-Template-Dateien, und es ist enorm produktiver die Vorlagen während der Entwicklung zu entwerfen und zu aktualisieren, ohne dass die Änderungen neu zu starten, um zu sehen.

Also, gibt es eine Möglichkeit, die Classpath des Stegs Plugin können Sie die Ziel / Klassen und Ressourcen Verzeichnisse jedes JAR-Modul enthalten, anstelle der tatsächlichen JAR-Dateien im lokalen Repository?

Danke!
Yaniv

War es hilfreich?

Lösung

Dies ist nicht möglich, mit einem Multi-Modul Maven Projekt. Eine Grundregel von Maven-Projekten ist, dass jedes Projekt in der Lage sein sollte, allein zu stehen. Das schließt sie nicht aus zusammen gebaut, aber jeder ein Projekt sollte so lange selbst gebaut werden können, da alle es die Abhängigkeiten erfüllt sind.

In diesem Fall bedeutet dies, dass das WAR-Projekt nicht zu den anderen Projekten blicken, um zu sehen, ob sie aktualisiert werden muß, die POM für die anderen Projekte sind die definitive Erklärung das, was getan werden muss, um das Artefakt zu bauen. Und wenn das Artefakt gebaut wird, wird es im lokalen Repository gestellt. Es gibt keinen Zusammenhang zwischen den Quelldateien und das Artefakt an diesem Punkt, so gibt es keine Möglichkeit zu sagen, was Quelldateien auslösen würde eine des Artefakts wieder aufzubauen, dass der WAR abhängt.

Andere Tipps

In Eclipse können Sie "Run Jetty" verwenden, um dies zu erreichen.
In IDEA Run-Konfiguration, gibt es eine Option 'Resolve Workspace Artefakte', es zu überprüfen.

Wenn Sie m2eclipse (Eclipse-Plug-in für eine enge Integration von Maven in Eclipse), können Sie Ihre Anlegestelle laufen: run Ziel im Web-Modul und anderen Abhängigkeiten berücksichtigt aus Ihrem Arbeitsbereich genommen werden, auch wenn sie nicht in Ihrem lokalen Repository zur Verfügung.

Es gibt nur eine Option in Ihrem Laufe Maven zu sagen, Ihre Module im Arbeitsbereich selbst zu lösen (standardmäßig wäre es nur holen, was im lokalen Repository bereitgestellt wird).

Leider kann ich nicht das gleiche Verhalten in IDEA haben und ich muss eine Installation ausgeführt werden, bevor die Anlegestelle laufen. Laufen auf dem Web-Modul

Based on this answer:Best practice wrt. `mvn install`, multi-module projects, and running one submodule a workaround around Mavens horrible restrictions and reactor limitations is to define the plugin in the parent pom with skip true, and then reenable it in the respective submodule using skip false.

I solved by using a maven launcher and configuring Resolve Workspace artifacts, that is not checked by default enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top