gpt4 book ai didi

java - 使用 Shade-Plugin 正确最小化 Uber Jar

转载 作者:IT老高 更新时间:2023-10-28 20:22:50 26 4
gpt4 key购买 nike

我正在使用 Maven-Shade-Plugin 创建一个可运行的 Uber-jar。根据 this page 上的最后一帧,可以使用以下方法最小化 jar 的大小:

<configuration>
<minimizeJar>true</minimizeJar>
</configuration>

但是这个特性没有考虑到 log4j.properties 文件中声明的类。因此,例如org.apache.log4j.appender.TimeAndSizeRollingAppender 不包含在 Uber-jar 中,即使它已在 log4j.properties 文件中声明。

我相信我会在使用 Spring 时遇到同样的问题。如果我的代码仅引用接口(interface) A,并且我的 Spring 文件包含实现 A 的类 B 的实例化,那么 B 可能不会添加到 jar 中,因为它不在代码中。

我该如何解决这个问题?

最佳答案

此功能已添加到 1.6 版的 maven-shade-plugin(刚刚发布)。 minimizeJar 现在不会删除过滤器中特别包含的类。请注意,在过滤器中包含 Artifact 的某些类将排除该 Artifact 的未指定类,因此请务必包含您需要的所有类。

这是一个示例插件配置:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>log4j:log4j</artifact>
<includes>
<include>**</include>
</includes>
</filter>
<filter>
<artifact>commons-logging:commons-logging</artifact>
<includes>
<include>**</include>
</includes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>

要仅包含特定类,请在过滤器中的类名称中使用路径斜杠将它们添加为包含(同样,未包含的类将被自动排除)。

<filter>
<artifact>org.yourorg:your-artifact</artifact>
<includes>
<include>org/yourorg/yourartifact/api/*</include>
<include>org/yourorg/yourartifact/util/*</include>
</includes>
</filter>

关于java - 使用 Shade-Plugin 正确最小化 Uber Jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817257/

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