manage project dependencies with SBT
本文最后更新于:Thursday, December 3rd 2020, 10:20 pm
Dependency
依赖分为:托管依赖「managed」和非托管依赖「unmanaged」
Unmanaged
非托管依赖:比如JAR包
使用方法:
- 把需要的JAR包拷贝到项目根目录的
lib文件夹 下。 - 如果该JAR包还依赖其它JAR包,你也要下载其它JAR并把其同样拷贝到lib目录中
缺点:
- 要自己解决包依赖关系,一旦项目变大了,靠手工维护基本不可能
Managed(key)
托管依赖:通过给定项目一些属性,由构建工具(如sbt)自动去默认仓库下载。
Single lib
基本语法: 写在项目的「build.sbt」文件中
1 | |
最小完整的文件:
1 | |
- 👆方法说明:
| Method | Description |
|---|---|
| += | 键值对;用+=表示给键(libraryDependencies)附加值 |
| % | 用于从你提供的字符串中构建Ivy module ID |
| %% | 当其在groupID后使用时,自动把你项目Scala版本号添加到工件名字末尾 |
example:👇两个等效
1 | |
libraryDependencies可以在sbt默认远程仓库中找到

notes:
- 假设你添加一个依赖,但是这个工件依赖其它的工件,那么sbt会自动帮你下载依赖,这是非托管无法比拟的
- 工件的版本很总要;一定要与自己项目中Scala版本兼容
- SBT使用
Apache Ivy作为自己的依赖管理器,而Ivy也被Ant和Maven使用,因此能在Scala项目中很容易使用多年来创建的丰富Java库。 - SBT使用standard Maven repository作为默认仓库(索引的工件数截至2020/12/03已经是18.4M); 如果你需要的库没有发布到改标准库中,你必须告诉SBT去哪里寻找,这个过程通过添加一个
resolver解决
Multiple lib
使用
Seq方法(注意是++=)1
2
3
4
5libraryDependencies ++= Seq(
"net.sourceforge.htmlcleaner" % "htmlcleaner" % "2.4",
"org.scalatest" % "scalatest_2.10" % "1.9.1" % "test",
"org.foobar" %% "foobar" % "1.8"
)Multiple project
使用
lazy:构建多个项目
使用
projects:查看项目结构

使用
.dependsOn:主项目依赖可以移到子项目中,然后显示指明1
.dependsOn(helloCore) // 表示依赖子项目使用
dist:生成通用jar包在~/project/plugins.sbt添加插件 『~代表项目根目录』
1
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.4") // 添加sbt-native-packager插件,用于打包universal package在build.sbt中添加
JavaAppPackaging1
.enablePlugins(JavaAppPackaging) // 用于打包dist?
使用
publishlocal: 把包发布到本地默认是在~\.ivy2\local\文件夹下
严格按照上述
groupID % artifactID % revision % configuration来组织
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21-com.example // groupID
- hello_2.12 // artifactID
- 1.0.0 // revision
- docs
- ivys
- jars
- proms
- scrs
- hello-core_2.12 // 子项目生成的工件
- 1.0.0
- docs
- ivys
- jars
- proms
- scrs
- 0.1.0-SNAPSHOT(这是自前发布的)
- docs
- ivys
- jars
- proms
- scrs- 使用
Docker/publishLocal:生成镜像
References
[1] sbt-by-example
[2] sbt-how-to-manage-project-dependencies-in-scala
[4] Sbt 依赖配置
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!