You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何减小maven-assembly-plugin生成的jar包体积 仅2依赖就达110MB

Maven 含依赖 jar 包体积过大优化方案

你使用的两个依赖本身包含大量传递依赖,是jar包体积异常大的核心原因,可通过以下步骤逐步优化:

1. 排除冗余传递依赖

ApacheJMeter_Java默认携带大量你大概率用不到的JMeter功能组件、日志实现、测试框架等传递依赖,Selenium Java默认包含所有浏览器的驱动绑定、多余工具包,可通过以下方式处理:

  • 执行mvn dependency:tree查看完整依赖树,标记所有未用到的传递依赖
  • 在pom的依赖声明中通过<exclusions>标签排除冗余项,示例配置如下:
<!-- 排除ApacheJMeter_Java的冗余依赖 -->
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_java</artifactId>
    <version>你的实际版本号</version>
    <exclusions>
        <!-- 排除多余日志实现 -->
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <!-- 排除用不到的JMeter组件,比如HTTP采样器、FTP采样器等 -->
        <exclusion>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_http</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.jmeter</groupId>
            <artifactId>ApacheJMeter_ftp</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 对Selenium Java做同理排除:如果你只用Chrome浏览器,直接排除firefox、edge、IE、safari等其他浏览器的驱动依赖即可。

2. 替换打包插件为maven-shade-plugin

maven-assembly-plugin默认只会全量打入所有依赖,不做去重和裁剪,推荐使用maven-shade-plugin,它支持依赖去重、类裁剪功能,配置示例:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <!-- 开启类裁剪,仅打包代码实际用到的类 -->
                <minimizeJar>true</minimizeJar>
                <createDependencyReducedPom>false</createDependencyReducedPom>
            </configuration>
        </execution>
    </executions>
</plugin>

注意:如果你的代码中存在反射加载类的逻辑,需要在插件配置中手动添加<include>规则引入对应类,避免运行时出现类找不到异常。

3. 排除冗余资源文件

依赖包中存在大量非必要的资源文件,可以在打包时直接排除,在maven-shade-plugin的configuration节点中添加如下过滤规则:

<filters>
    <filter>
        <artifact>*:*</artifact>
        <excludes>
            <!-- 排除签名文件、证书文件 -->
            <exclude>META-INF/*.SF</exclude>
            <exclude>META-INF/*.DSA</exclude>
            <exclude>META-INF/*.RSA</exclude>
            <!-- 排除开源协议、说明文档 -->
            <exclude>META-INF/LICENSE*</exclude>
            <exclude>META-INF/NOTICE*</exclude>
            <exclude>META-INF/README*</exclude>
            <!-- 可根据你的实际情况排除不需要的配置、静态资源文件 -->
        </excludes>
    </filter>
</filters>

4. 进阶优化(可选)

  • 如果你使用Java 9及以上版本,可通过jlink裁剪JRE,仅打包用到的JDK模块,进一步降低整体发布包体积
  • 升级依赖到最新稳定版,高版本依赖通常会做一定的体积优化,也会拆分更细的子模块方便按需引入

内容的提问来源于stack exchange,提问作者Pratiksha Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:09:02