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

Sbt/Maven是否将完整依赖打入Jar?Rest API依赖打包疑问

关于Sbt/Maven依赖打包与旧项目引入的问题解答

1. Sbt/Maven是否会将完整的依赖内容打包进Jar文件中?

这个得分情况来看:

  • 如果你用的是默认的打包任务(比如Maven的maven-jar-plugin,Sbt的package命令),生成的Jar只会包含你自己项目的代码和资源,不会把依赖的内容打包进去。这时候你的项目Jar是“瘦Jar”,运行的时候需要把依赖的Jar放在类路径里。
  • 如果你要打可执行的胖Jar(比如用Maven的maven-shade-plugin,Sbt的sbt-assembly插件),默认配置下会把所有依赖的完整内容都打包进最终的Jar里。不过你也可以通过插件配置,排除某些不需要的依赖、或者对冲突的类做阴影处理,但默认是全量引入依赖的。

2. 引入旧项目作为依赖后,打包会包含全部功能还是仅调用的方法?

首先得明确:

  • 如果你是用默认方式打包新Rest API项目的普通Jar,旧项目的代码不会被打入新Jar里,它会作为一个独立的依赖存在,运行时需要一起加载。
  • 如果你是打胖Jar(比如用shade/assembly),默认情况下会把旧项目的完整181M Jar内容全部打包进去,不管你的新项目有没有调用其中的方法。因为Sbt和Maven的胖Jar插件默认不会做“代码裁剪”——它们不知道哪些代码是你实际用到的,只会把整个依赖Jar的内容合并进去。

如果不想把整个181M的旧项目都打包进去,你可以考虑这些方案:

  • 使用代码裁剪工具,比如ProGuard或者R8,它们可以分析你的代码调用链,移除未被使用的类、方法和资源,从而大幅缩小Jar体积。不过配置这些工具需要花点功夫,尤其是旧项目可能有一些反射调用或者动态加载的代码,得注意保留这些部分。
  • 不打胖Jar,采用依赖分离的部署方式:把新项目的瘦Jar和所有依赖(包括旧项目的Jar)放在一起,用启动脚本指定类路径来运行,这样也能避免把大体积的旧项目打包进新Jar里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:41:34