gpt4 book ai didi

maven - 从依赖项 jar 中排除 Java 包

转载 作者:行者123 更新时间:2023-12-03 20:54:55 25 4
gpt4 key购买 nike

我想使用第三方供应商的 jar。但是在这个 jar 中我有旧版本的 Java 包 org.osgi.framework我需要找到某种方法将包从主项目中排除。像这样的东西:

<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.ws.admin.client</artifactId>
<version>8.5.0</version>
<exclusions>
<exclusion>org.osgi.framework</exclusion>
</exclusions>
<type>jar</type>
</dependency>

你能推荐一些解决方案吗?

最佳答案

虽然更好的解决方案是使用分类器(如 this answer 中所述)重新打包依赖项(没有不需要的包)并将其发布到您的企业 Maven 存储库(或 install it 到本地 Maven 缓存中,如果它是一个个人项目),下面是一个不同的解决方案,它也应该满足您的需求。

你可以有一个 multi-module Maven 项目,有一个只有这个依赖的模块,你可以在其中使用 Maven Shade Plugin及其filters official example 中解释的属性.

根据 documentation , filters元素:

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



在您的情况下,以下配置应应用过滤器:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>com.ibm:com.ibm.ws.admin.client</artifact>
<excludes>
<exclude>org/osgi/framework/**</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

package 生成的 jar阶段不应再包含该包。作为 Maven 输出的一部分,您应该看到:

[INFO] --- maven-shade-plugin:2.4.3:shade (default) @ test-checksum ---
[INFO] Including com.ibm:com.ibm.ws.admin.client:jar:8.5.0 in the shaded jar.
[INFO] Replacing original artifact with shaded artifact.



您可以验证生成的jar的内容,过滤后的包不应该在那里。

然后,此模块的输出将包含您正在寻找的"new"/过滤的 jar。然后消费者模块只需要对该模块有依赖关系,因此应用了过滤器。
这种多模块项目的一个例子是:
+ aggregator/parent project
- filtered-dependency-module (applying the shade filter)
- consumer-module (having dependency on the filtered module)

更新
进一步注意:在应用过滤器的模块中,您应该将依赖项声明为 optional这样消费者模块就不会再次传递它。
<dependencies>
<dependency>
<groupId>com.ibm</groupId>
<artifactId>com.ibm.ws.admin.client</artifactId>
<version>8.5.0</version>
<optional>true</optional>
</dependency>
</dependencies>

Optional 不会影响模块本身,只会影响消费者。并且 Shade 插件将继续工作(我重新测试了它,以防万一)。

关于maven - 从依赖项 jar 中排除 Java 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34955820/

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