До сих пор я использовал плагин сборки maven для создания двух JAR для каждого артефакта - скомпилированных источников и зависимостей - причина для этого была простой: развертывание только скомпилированных источников по сети значительно быстрее, чем развертывание all-in-one-JAR с 40 МБ данных.
Из-за перезаписи внутренних файлов мне пришлось переключиться на плагин maven shade, чтобы использовать функцию <transformers>
. Однако я не могу выполнить оба этих двух исполнения:
<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>
Когда я запускаю mvn package
, выполняется только второе исполнение. Первый всегда игнорируется. С плагином сборки maven он работал отлично.
Конечно, решение может заключаться в том, чтобы одновременно использовать как сборку, так и плагин, но я хотел бы найти более последовательное решение.