Maven Shade Plugin zur Herstellung von zwei Gläsern

Bisher verwendete ich das Maven-Assembly-Plugin, um zwei JARs für jedes Artefakt zu generieren - kompilierte Quellen und Abhängigkeiten - der Grund dafür war einfach: Die Bereitstellung nur der kompilierten Quellen über das Netzwerk ist erheblich schneller als die Bereitstellung einer All-in-One-JAR mit 40 MB von Dateien.

Wegen des Überschreibens innerer Dateien musste ich auf das Maven Shadow Plugin umsteigen, um das benutzen zu können<transformers> Merkmal. Es gelingt mir jedoch nicht, beide Ausführungen auszuführen:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-libs</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}-libs.jar</outputFile>
          <artifactSet>
            <excludes>
              <exclude>...</exclude>
            </excludes>
          </artifactSet>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.schemas</resource>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <id>shade-main</id>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <outputFile>target/assembly/${project.artifactId}.jar</outputFile>
          <artifactSet>
            <includes>
              <include>...</include>
            </includes>
          </artifactSet>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

Wenn ich rennemvn packagewird nur die zweite Ausführung ausgeführt. Der erste wird immer ignoriert. Mit dem Maven Assembly Plugin hat es perfekt funktioniert.

Natürlich könnte die Lösung darin bestehen, sowohl das Assembly- als auch das Shading-Plugin gleichzeitig zu verwenden, aber ich würde gerne eine konsistentere Lösung finden.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage