С помощью maven-shade-plugin
можно исключить определенный класс для конкретных зависимостей. Это настраивается с помощью filters
. имущество:
Используемые архивные фильтры. Позволяет указать артефакт в виде составного идентификатора, используемого artifactSet
, и набора шаблонов включения/исключения файлов для фильтрации содержимого архива, добавляемого в затененный банку.
В вашем случае, чтобы исключить класс com.package.A
из зависимости art2
, вы можете:
<filters>
<filter>
<artifact>com.package:art2</artifact>
<excludes>
<exclude>com/package/A.class</exclude>
</excludes>
</filter>
</filters>
Чтобы сделать это динамическим, то есть выбрать во время сборки, какой com.package.A
класс вы хотите сохранить, вам не нужно использовать профиль. Вы можете использовать свойство Maven, которое будет содержать идентификатор артефакта зависимости для фильтрации. В свойствах добавьте
<properties>
<shade.exclude.artifactId>art2</shade.exclude.artifactId>
</properties>
Свойство shade.exclude.artifactId
будет содержать идентификатор артефакта зависимости для фильтрации. По умолчанию эта конфигурация выберет art2
. Затем в конфигурации <filter>
плагина Shade можно использовать <artifact>com.package:${shade.exclude.artifactId}</artifact>
.
Вот полная конфигурация этого в действии:
<build>
<plugins>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>shade</id>
<goals>
<goal>shade</goal>
</goals>
<phase>package</phase>
<configuration>
<filters>
<filter>
<artifact>com.package:${shade.exclude.artifactId}</artifact>
<excludes>
<exclude>com/package/A.class</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<shade.exclude.artifactId>art2</shade.exclude.artifactId>
</properties>
Запуск mvn clean package
создаст убер-банку с A.class
из art1
, так как art2
был исключен. И затем запуск mvn clean package -Dshade.exclude.artifactId=art1
сохранит на этот раз A.class
из зависимости art2
, так как тот из art1
был исключен.
person
Tunaki
schedule
02.09.2016