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
相关产品推荐
相关产品推荐

