Maven生成JAR文件与Eclipse导出JAR文件的大小差异问题咨询
Maven生成JAR包体积大于Eclipse导出JAR的常见原因
- 包含依赖范围不同
Eclipse默认导出JAR时仅包含当前项目的编译类和自有资源文件,需要手动勾选才会将第三方依赖打入包内。而maven-assembly-plugin如果使用jar-with-dependencies等预设配置,会自动将所有compile范围的第三方依赖全部打入最终JAR;maven-jar-plugin即便默认不打入外部依赖,不少项目配置也会主动合并部分必要依赖进包,这是体积差异最常见的原因。 - 编译调试信息保留策略不同
Maven默认的maven-compiler-plugin配置会保留完整的调试信息,包括源码行号、局部变量表、源文件名等,方便线上问题排查。而Eclipse默认编译策略会裁剪部分非必要调试信息,单个Class文件的体积本身就会更小。 - 元数据与额外文件生成规则不同
Maven打包时会自动在JAR的META-INF目录下生成大量额外元数据,包括当前项目的pom信息、插件生成的配置文件、组件索引文件等,部分框架适配插件还会额外写入配置缓存文件。Eclipse导出时仅会打包项目内实际存在的资源文件,不会生成这类额外元数据。 - 压缩级别差异
Eclipse导出JAR时默认使用更高的压缩等级减少体积,而maven-jar-plugin、maven-assembly-plugin默认压缩等级更低,部分配置甚至会直接使用不压缩的存储模式,进一步拉大了体积差距。 - 重复文件处理逻辑差异
maven-assembly-plugin未配置去重规则时,多个依赖中同名的资源文件会被重复打包进最终JAR,而Eclipse导出时默认会对同名文件做覆盖处理,不会重复存储冗余内容。
内容的提问来源于stack exchange,提问作者Harold Ibouanga
相关产品推荐
相关产品推荐

