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

Maven官方仓库是否发布Fat Jar?部署Java应用该选哪种Jar?

关于Maven仓库发布Fat Jar还是瘦Jar的问题

嘿,这个问题问到点子上了——Jar包的类型选择直接关系到你的项目在Maven生态里的易用性,咱们一步步说清楚:

先搞懂两种Jar的核心区别

  • 瘦Jar(不含依赖的Jar):只包含你自己编写的代码、配置和资源文件,体积小巧(就像你看到的JUnit 4.12,只有307KB)。它依赖的第三方库会通过Maven的依赖管理机制,由使用者的项目自动拉取。
  • Fat Jar(Uber Jar):把项目本身和所有依赖的第三方类库都打包进同一个Jar里,体积大,但能直接通过java -jar命令独立运行。不过它的致命问题是不适合被其他项目当作依赖引用——会导致严重的版本冲突(比如你的Fat Jar里包含了Guava 28,而引用你的项目用了Guava 30,就会出现类版本不兼容的问题)。

业内通用的发布策略

  • 如果你的项目是类库/框架(比如JUnit、MyBatis这类,用来给其他项目做依赖的):必须发布瘦Jar。这是Maven生态的共识,类库的核心价值是提供可复用的功能,而不是把所有依赖都打包进来——把依赖管理交给Maven,能最大程度避免使用者的项目出现依赖冲突。
  • 如果你的项目是可独立运行的应用(比如Spring Boot Web应用):通常会同时发布两种Jar。比如Spring Boot的Maven插件会自动生成两个Jar:一个是可直接运行的Fat Jar(文件名一般是xxx.jar),另一个是瘦Jar(文件名一般是xxx.jar.original)。这样既满足用户直接运行的需求,也方便其他项目集成你的应用模块。

官方Maven中央仓库是否接受Fat Jar?

官方Maven中央仓库几乎不接受Fat Jar,除非是那种明确为独立运行设计、且绝对不会被当作依赖的特殊项目(这种情况非常罕见)。中央仓库的审核标准严格遵循Maven的依赖管理理念,瘦Jar才是符合规范的发布方式——它能保证整个生态的依赖一致性,避免重复打包和版本冲突。

给你的小建议

  • 如果是类库项目:在pom.xml里准确声明所有<dependency>,确保依赖范围(比如compile、test)设置正确,然后直接发布瘦Jar即可。
  • 如果是独立应用:用Maven插件(比如spring-boot-maven-plugin)生成Fat Jar供用户直接运行,同时保留瘦Jar的发布,方便其他项目集成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:08:09