Ami*_*mar 4 maven maven-shade-plugin
有两个类com.package.A,一个来自
<dependency>
<groupId>com.package</groupId>
<artifactId>art1</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
一个来自
<dependency>
<groupId>com.package</groupId>
<artifactId>art2</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
请注意,工件ID是不同的.
对于不同的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>
Run Code Online (Sandbox Code Playgroud)
要使其动态化,即在构建时选择com.package.A要保留的类,您不需要使用配置文件.您可以使用Maven属性来保存依赖项的工件ID以进行过滤.在您的属性中,添加
<properties>
<shade.exclude.artifactId>art2</shade.exclude.artifactId>
</properties>
Run Code Online (Sandbox Code Playgroud)
该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>
Run Code Online (Sandbox Code Playgroud)
运行mvn clean package将创建与一位超级罐子A.class从art1因为从一个art2被排除在外.然后,运行mvn clean package -Dshade.exclude.artifactId=art1会将这段时间A.class从依赖关系中排除art2,art1因为排除了依赖关系.
| 归档时间: |
|
| 查看次数: |
2883 次 |
| 最近记录: |