使用sbt与IntelliJ构建Scala JAR的体积差异及配置优化咨询
问题分析与解决方法
为什么IntelliJ构建的JAR体积这么大?
这主要是因为IntelliJ默认的构建方式(比如直接使用「Build Artifacts」功能)会把所有依赖库(包括Scala标准库、第三方依赖)都打包到JAR里,而你用sbt clean package命令构建的是「瘦JAR(thin JAR)」——只包含你自己编写的代码,依赖项不会被打包进去。毕竟StreamSets和Spark运行环境本身已经提供了这些基础依赖,所以两者都能正常运行,但体积差得特别多。
如何配置IntelliJ构建小体积的JAR?
最省心的方式是直接复用sbt的构建逻辑,和命令行效果完全一致:
- 打开IntelliJ右侧的sbt面板(如果没显示,可通过
View > Tool Windows > sbt调出) - 展开你的项目节点,找到
Tasks > package,右键选择「Run」即可 - 构建完成后,小体积JAR会生成在
target/scala-<你的Scala版本>目录下
如果一定要用IntelliJ的Artifact功能构建,需要手动配置只打包自己的代码:
- 打开
File > Project Structure > Artifacts - 点击左上角的
+,选择JAR > Empty,给这个Artifact起个辨识度高的名字 - 在右侧「Available Elements」区域,找到项目编译后的class文件(sbt项目通常是
target/scala-<版本>/classes,普通Scala项目则是out/production/classes),右键选择「Put into Root」 - 务必不要添加任何依赖库(比如Scala标准库、第三方JAR)到Artifact中
- 点击「OK」后,回到主界面选择
Build > Build Artifacts,选中刚才创建的Artifact执行构建,就能得到仅包含自身代码的小体积JAR
内容的提问来源于stack exchange,提问作者vandekerkoff
相关产品推荐
相关产品推荐

