Verwalten von multi-Modul-Abhängigkeiten mit dem Maven assembly plugin

Ich benutze Maven-assembly-plugin, um eine Montage für meine multi-Modul-Projekt. Es sind zwei separate Anwendungen, die von diesem multi-Modul-Projekt, die jeweils einen separaten Satz von Abhängigkeiten. Ich machte eine benutzerdefinierte assembly-descriptor, die dort zwei Verzeichnisse (für jede Anwendung) mit Modul baut und Ihre jeweiligen Abhängigkeiten. Es funktioniert auch alles einwandfrei, aber eine Sache - es stellt Abhängigkeiten für beide Module an der jeweils anderen Baugruppe.

Folgende ist eine vereinfachte version von meinem Projekt, mit genau dem gleichen Verhalten.

Überlegen, ein Projekt bestehend aus zwei Modulen und einer assembly-Modul:

APP
  module1
  module2
  assembly

Habe ich Hinzugefügt, Abhängigkeiten rein zur demonstration:

com.test.app:module1:jar:1.0
\- commons-cli:commons-cli:jar:1.2:compile

com.test.app:module2:jar:1.0
\- commons-daemon:commons-daemon:jar:1.0.8:compile

Hier ist die parent-POM:

<project>
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test</groupId>
  <artifactId>app</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <modules>
    <module>module1</module>
    <module>module2</module>
    <module>assembly</module>
  </modules>
</project>

module1 POM:

<project>
  <parent>
    <groupId>com.test</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test.app</groupId>
  <artifactId>module1</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <version>1.2</version>
    </dependency>
  </dependencies>
</project>

"Modul2" POM:

<project>
  <parent>
    <groupId>com.test</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test.app</groupId>
  <artifactId>module2</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>commons-daemon</groupId>
      <artifactId>commons-daemon</artifactId>
      <version>1.0.8</version>
    </dependency>
  </dependencies>
</project>

Montage POM:

<project>
  <parent>
    <groupId>com.test</groupId>
    <artifactId>app</artifactId>
    <version>1.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.test.app</groupId>
  <artifactId>assembly</artifactId>
  <version>1.0</version>
  <packaging>pom</packaging>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2.2</version>

        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>

            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>

        <configuration>
          <appendAssemblyId>false</appendAssemblyId>

          <descriptors>
            <descriptor>src/main/assembly/descriptor.xml</descriptor>
          </descriptors>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

Und schließlich die assembly-descriptor:

<assembly>
  <id>distribution</id>
  <includeBaseDirectory>false</includeBaseDirectory>

  <formats>
    <format>dir</format>
  </formats>

  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>

      <includes>
        <include>com.test.app:module1:jar</include>
      </includes>

      <binaries>
        <outputDirectory>module1</outputDirectory>
        <unpack>false</unpack>

        <dependencySets>
          <dependencySet>
            <unpack>false</unpack>
          </dependencySet>
        </dependencySets>
      </binaries>
    </moduleSet>

    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>

      <includes>
        <include>com.test.app:module2:jar</include>
      </includes>

      <binaries>
        <outputDirectory>module2</outputDirectory>
        <unpack>false</unpack>

        <dependencySets>
          <dependencySet>
            <unpack>false</unpack>
          </dependencySet>
        </dependencySets>
      </binaries>
    </moduleSet>
  </moduleSets>
</assembly>

Wie Sie sehen können, der Montage ist die Bindung zum Paket-phase. Also, wenn ich ausführen

mvn package

vom übergeordneten Verzeichnis habe ich folgende Montage

module1/
  commons-cli-1.2.jar
  commons-daemon-1.0.8.jar
  module1-1.0.jar
module2/
  commons-cli-1.2.jar
  commons-daemon-1.0.8.jar
  module2-1.0.jar

Im Grunde ist hier das problem, dass module1 hängt nicht von commons-daemon, aber die assembly-plugin integriert hat, die Abhängigkeit. Ähnlich ist es mit "Modul2" und " commons-cli.

Kann jemand erklären, warum die assembly-plugin auf diese Weise verhält?

Einer was wäre eine Lösung?

  • Ich würde nicht erwarten, dass dieses seltsame Verhalten von maven-assembly-plugin... Bist du sicher, dass es keine Abhängigkeiten gibt, geschoben, um zu Ihrer assembly-Projekt von den Eltern? Zeigen Sie uns die "dependency tree" generiert für Montage-Projekt.
  • Abhängigkeit Baum für Montage-Modul ist offensichtlich leer, denn seine POM hat keine Abhängigkeit Erklärungen.
InformationsquelleAutor sertsy | 2012-01-27
Schreibe einen Kommentar