2 Stimmen

Aggregieren von Abhängigkeiten in einem Multi-Modul Maven Projekt

Ich versuche herauszufinden, wie ich meine Maven-Abhängigkeiten in einem Projekt mit mehreren Modulen zusammenfassen kann. Zum Beispiel, wenn ich habe:

root pom/project1
root pom/project2

und ich renne mvn dependency:copy-dependencies habe ich am Ende die Abhängigkeiten in:

root pom/project1/target/dependency
root pom/project2/target/dependency

Was ich wirklich will, ist, dass, wenn ich den mvn-Befehl im Root-Pom-Ordner ausführe, alle Abhängigkeiten nach root pom/dependency . Gibt es eine Maven-Eigenschaft, die mir das Ausgabeverzeichnis des Root-Poms liefert (ähnlich wie bei ${project.build.directory} )? Ich weiß, dass ich einfach alle Abhängigkeitsordner nachträglich an denselben Ort kopieren kann, aber ich hatte auf etwas Saubereres gehofft.

1voto

naikus Punkte 23917

Sie müssen das Abhängigkeits-Plugin so konfigurieren, dass es Abhängigkeiten an einen bestimmten Ort kopiert. Dies kann mit der Option outputDirectory Konfigurationseigenschaft.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
      <execution>
         <id>copy-dependencies</id>
         <phase>package</phase>
         <goals>
            <goal>copy-dependencies</goal>
         </goals>
         <configuration>
              <outputDirectory>${outputDir}</outputDirectory>
         </configuration>
      </execution>
   </executions>
</plugin>

Aber wenn Sie versuchen, dies für die Verteilung zu tun, würde ich empfehlen, dass Sie eine Baugruppe erstellen, indem Sie die Maven-Assembly-Plugin

In der Dokumentation steht:

Das Assembly Plugin für Maven 2.0 ist in erster Linie dazu gedacht, den Benutzern die Möglichkeit zu geben, die Projektoutput zusammen mit seinen Abhängigkeiten, Modulen, Website-Dokumentation und anderen Dateien in einem einzigen verteilbaren Archiv zusammenzufassen.

1voto

Pascal Thivent Punkte 548176

Was ich wirklich will, ist, dass, wenn ich den mvn-Befehl im Root-Pom-Ordner ausführe, alle Abhängigkeiten nach Root pom/dependency kopiert werden. Gibt es eine Maven-Eigenschaft, die mir das Ausgabeverzeichnis des Root pom liefert (ähnlich wie ${project.build.directory} )?

Nein, denn die Module sollten sich dessen eigentlich nicht bewusst sein.

Ich weiß, dass ich alle Abhängigkeitsordner einfach nachträglich an denselben Ort kopieren kann, aber ich hatte mir etwas Saubereres erhofft.

Der Maven-Weg wäre die Verwendung der Maven Assembly Plugin y einen benutzerdefinierten Deskriptor . Aber wenn Sie mit dem Maven Assembly Plugin und seinem Deskriptorformat nicht vertraut sind, wird es nicht einfach sein.

Ein weniger sauberer, aber einfacher Ansatz wäre die Konfiguration der Maven-Abhängigkeits-Plugin um die Abhängigkeiten unter Verwendung eines relativen Pfads in das übergeordnete Projekt zu kopieren. Etwa so:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <outputDirectory>../root_pom/target/dependency</outputDirectory>
  </configuration>
</plugin>

Aber wie ich schon sagte, führt dies zu einer engen Kopplung zwischen Modulen und dem Root-Projekt, was überhaupt nicht gut ist (und ich würde nicht weiter gehen, indem ich den Aufruf des Ziels als Teil des Builds einbeziehe, Module sollten unabhängig bleiben und man sollte in der Lage sein, ein Modul zu bauen, ohne das übergeordnete "auszuchecken").

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X