有两堂课com.package.A
,一堂课来自
<dependency>
<groupId>com.package</groupId>
<artifactId>art1</artifactId>
</dependency>
还有一个来自
<dependency>
<groupId>com.package</groupId>
<artifactId>art2</artifactId>
</dependency>
请注意,工件标识是不同的。
对于不同的Maven配置文件,我想排除一个版本,而保留另一个版本。我正在使用Shade插件。
使用maven-shade-plugin
,可以排除特定依赖的特定类。这是在filters
属性的帮助下配置的:
要使用的存档过滤器。允许您以由使用的复合标识符的形式指定工件,并使用
artifactSet
一组包含/排除文件模式来过滤将归档文件的哪些内容添加到有色jar中。
在您的情况下,要将类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属性来保存要过滤的依赖项的工件ID。在您的媒体资源中,添加
<properties>
<shade.exclude.artifactId>art2</shade.exclude.artifactId>
</properties>
该shade.exclude.artifactId
属性将保存要过滤的依赖项的工件ID。默认情况下,此配置将选择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
from创建一个uber jar,art1
因为一个fromart2
被排除在外。然后,运行mvn clean package -Dshade.exclude.artifactId=art1
将使该时间A.class
与依赖项保持一致,art2
因为art1
排除了from项。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句