gpt4 book ai didi

Maven从不同的依赖项中动态排除具有相同名称的类

转载 作者:行者123 更新时间:2023-12-05 00:17:51 25 4
gpt4 key购买 nike

有两个类(class)com.package.A ,一个来自

<dependency>
<groupId>com.package</groupId>
<artifactId>art1</artifactId>
</dependency>

一个来自
<dependency>
<groupId>com.package</groupId>
<artifactId>art2</artifactId>
</dependency>

请注意, Artifact ID 是不同的。

对于不同的 Maven 配置文件,我想排除一个版本而只保留另一个版本。我正在使用阴影插件。

最佳答案

maven-shade-plugin ,可以到 exclude certain class对于特定的依赖项。这是在 filters 的帮助下配置的属性(property):

Archive Filters to be used. Allows you to specify an artifact in the form of a composite identifier as used by artifactSet and a set of include/exclude file patterns for filtering which contents of the archive are added to the shaded 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您想要保留的类(class),您不需要使用配置文件。您可以使用 Maven 属性来保存要过滤的依赖项的 Artifact ID。在您的属性中,添加
<properties>
<shade.exclude.artifactId>art2</shade.exclude.artifactId>
</properties>
shade.exclude.artifactId属性将保存要过滤的依赖项的 Artifact ID。默认情况下,此配置将选择 art2 .然后,在 <filter> Shade Plugin的配置,可以使用 <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 的 uber jar来自 art1因为来自 art2被排除在外。然后,运行 mvn clean package -Dshade.exclude.artifactId=art1这次会保留 A.class来自依赖 art2因为来自 art1被排除在外。

关于Maven从不同的依赖项中动态排除具有相同名称的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39287779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com