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

Apache POI引入poi-ooxml后包体积过大,如何排除不必要依赖

Apache POI 5.x SXSSF场景依赖瘦身方案

poi-ooxml默认引入了大量办公格式处理、富媒体渲染、加密等场景的可选传递依赖,对于仅需生成SXSSF月度报表的场景,90%以上的依赖都可以安全排除,优化后整体依赖体积可控制在10MB以内。

1. 优先使用轻量核心依赖组合

Apache POI 5.x 拆分了OOXML相关依赖为轻量版poi-ooxml-lite和全量版poi-ooxml-full,默认poi-ooxml依赖的是体积更大的全量包。如果不需要处理复杂OOXML特性(如VBA、旧版兼容格式、特殊扩展图表等),可以直接放弃引入poi-ooxml,手动引入必需的最小依赖集合:

<!-- POI基础核心包,必需 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<!-- 轻量OOXML支持包,比全量包小15MB以上 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-lite</artifactId>
    <version>5.0.0</version>
</dependency>
<!-- SXSSF必需的OOXML结构定义包 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>5.0.0</version>
</dependency>

2. 若必须保留poi-ooxml依赖,添加排除规则

如果业务场景必须保留poi-ooxml依赖,可直接在依赖声明中添加如下排除规则,可削减至少30MB的包体积:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
    <exclusions>
        <!-- 排除SVG处理全量依赖,不需要处理Excel内SVG矢量图可安全排除,节省约9MB -->
        <exclusion>
            <groupId>org.apache.xmlgraphics</groupId>
            <artifactId>batik-all</artifactId>
        </exclusion>
        <!-- 排除PDF处理相关依赖,不需要导出PDF/读取PDF嵌入内容可排除,节省约7MB -->
        <exclusion>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
        </exclusion>
        <!-- 排除图像扩展处理依赖,不需要做复杂字体渲染、特殊格式图像导出可排除,节省约3MB -->
        <exclusion>
            <groupId>commons-imaging</groupId>
            <artifactId>commons-imaging</artifactId>
        </exclusion>
        <!-- 排除旧版二进制格式(.xls)处理依赖,不需要读写.xls文件可排除,节省约2MB -->
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
        </exclusion>
        <!-- 排除加密签名相关依赖,不需要生成加密/签名Excel可排除,节省约4MB -->
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcpkix-jdk15on</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk15on</artifactId>
        </exclusion>
        <!-- 排除其他办公格式处理辅助依赖,不需要处理Word/PPT/Excel单元测试场景可排除 -->
        <exclusion>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-excelant</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3. 额外注意事项

  • 如果报表不需要包含图表、自定义图片等富媒体内容,还可以额外排除图像处理相关的非必需依赖,再减少约2MB体积
  • 排除完成后建议对现有报表生成逻辑做全量回归测试,确认使用到的特性没有受到影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:09:05