【多图预警】Windows 安装 SBT、IDEA 使用 SBT 构建项目指南
1 - 认识 SBT
SBT,Simple Build Tool,恰如其名,是一款简单的、高效的、交互式的命令行构建工具。
类似于 Apache Maven(https://zh.wikipedia.org/wiki/Apache_Maven) 和 Apache Ant(https://zh.wikipedia.org/wiki/Apache_Ant),可看成是 Scala 世界的 Maven。有如下优势:
① 使用Scala作为DSL来定义build文件(one language rules them all);
② 通过触发执行(trigger execution)特性支持持续的编译与测试;
③ 增量编译:SBT的增量编译非常优秀,已经剥离为Zinc,被Eclipse、Maven、Gradle 等使用;
④ 可以混合构建Java和Scala项目;
⑤ 并行的任务执行;
⑥ 可以重用Maven或者ivy的repository进行依赖管理……
— 摘自 [https://github.com/CSUG/real_world_scala/blob/master/02_sbt.markdown]
2 - 下载安装包
下载地址:[https://www.scala-sbt.org/download.html]。
Spark2x 用的是0.13.1x 版本的 SBT,这里以 1.3.8 版本为例进行演示;
Windows 下不建议用
.msi
安装,老实下载.zip
或.tgz
,然后解压缩配置吧:-)
3 - 修改配置
假设你安装到了 D:\Software\sbt-1.3.8\
目录下。依次执行下述步骤:
3.1 配置环境变量
新增 SBT_HOME=D:\Software\sbt-1.3.8
;
在 Path
中添加 %SBT_HOME%\bin
—— 注意不要覆盖其他变量。
3.2 修改 SBT 的数据目录
Windows 下,SBT 默认数据目录是 %USERPROFILE%
,也就是 C:\Users\UR_NAME\
,为了防止重装系统导致 C 盘数据丢失,需要修改数据目录。
编辑 D:\Software\sbt-1.3.8\conf\sbtconfig.txt
文件,具体为:
# sbt configuration file for Windows
# Set the java args
#-mem 1024 was added in sbt.bat as default
-Xms1024m
-Xmx1024m
-XX:ReservedCodeCacheSize=128m
-XX:+CMSClassUnloadingEnabled1
# Set the extra sbt options
-Dsbt.log.format=true
-Dfile.encoding=UTF8
# 修改 SBT 的数据目录:
-Dsbt.boot.directory=D:/Repo/SbtBoot/.sbt/boot
-Dsbt.global.base=D:/Repo/SbtBoot/.sbt
-Dsbt.ivy.home=D:/Repo/SbtBoot/.ivy2
# 指定仓库的配置文件,文件名无特殊要求:
-Dsbt.repository.config=D:/Software/sbt-1.3.8/conf/repo.properties
注意:Windows 系统的文件分隔符是
\
,这里配置的分隔符是/
!配置项的含义,请查看:[https://www.scala-sbt.org/1.x/docs/Command-Line-Reference.html]
3.3 修改远程仓库
SBT 的默认仓库下载巨慢,比如通过 sbt -V
查看版本号,需要下载部分包,耗时10 min 以上。
我们在 3.2 节中指定了仓库的配置文件,文件内容如下:
[repositories]
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public
aliyun-ivy: http://maven.aliyun.com/nexus/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
注意:这里为了兼容 ivy 路径的布局,额外做了配置:
[organization]/.../[type]s/artifact.[ext]
4 - cmd 中运行 SBT
打开 cmd 终端窗口,输入 sbt
即可启动 SBT 服务。
建议进入项目路径下再运行 SBT,否则会提示当前路径下既没有
build.sbt
文件,也没有project
目录,SBT 找不到项目,也就无法编译运行了。注意:第一次执行
sbt
,它会下载启动所需要的依赖包,耗时较长。如果没有按照 3.3 节修改 SBT 的远程仓库,耗时会更久。
当窗口中出现 sbt:{DIR_NAME}>
提示符,则说明 SBT 服务已经成功启动,如下图:
退出方式:在命令框中输入 exit
即可退出:
sbt:repo> exit
[info] shutting down sbt server
5 - IDEA 中运行 SBT 项目
5.1 新建 SBT 项目
前提:已经为 IDEA 安装了 SBT 插件。
(1) 创建一个新的 Scala-SBT 项目:
设置项目名称、项目路径、SBT 版本、Scala 版本等信息,然后 [Finish]。
查看项目配置信息:
5.2 修改 SBT 插件的配置
此时 IDEA 使用的应该是插件默认的 SBT,我们需要修改 SBT 的配置:
其中 【VM parameters】中添加我们在 3.2 节中的配置,支持换行:
-Xms1024m
-Xmx1024m
-Xss4M
-XX:ReservedCodeCacheSize=128m
-XX:+CMSClassUnloadingEnabled
-Dsbt.log.format=true
-Dfile.encoding=UTF8
-Dsbt.boot.directory=D:/Repo/SbtBoot/.sbt/boot
-Dsbt.global.base=D:/Repo/SbtBoot/.sbt
-Dsbt.ivy.home=D:/Repo/SbtBoot/.ivy2
-Dsbt.repository.config=D:/Software/sbt-1.3.8/conf/repo.properties
另外,sbt-launch.jar
也要指定为我们安装路径下的启动包,这里是 D:\Software\sbt-1.3.8\bin\sbt-launch.jar
。
为了方便起见,可以对所有新项目的配置做相同的修改:
新版本 IDEA:[File] -> [Other Settings] -> [Settings for New Projects]
旧版本 IDEA:[File] -> [Other Settings] -> [Default Settings]
5.3 添加 Scala SDK
SBT 加载完成后,要创建 Scala 测试类,就要先配置 Scala SDK,具体方式为:
[File] -> [Project Structure] -> [Project Settings] -> [Libraries],添加本地的 Scala 安装根路径即可。比如我添加的安装路径是:D:\Software\scala-2.11.8
。
可选项:在
build.sbt
文件中添加项目依赖:(1) 不指定 Scala 库的版本: 依赖包的组织部分
org.apache.spark
后面加两个%号,SBT 会自动到仓库源中根据当前项目中 Scala 的版本进行依赖的匹配,如果没有通过scalaVersion := "2.x.x"
指定 Scala 版本,会以 SBT 默认的 Scala 版本号为主,例如:libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.5"
(2) 明确指定 Scala 库的版本: 依赖包组织部分
org.apache.spark
后面只加一个%号,例如:libraryDependencies += "org.apache.spark" % "spark-core_2.12" % "2.4.5"
5.4 创建、运行测试类
若项目有个对象带有 main 方法(或者对象继承了 App 接口),就可以通过 run 命令在 sbt 中运行代码。
如果有多个 main 方法时,sbt 会向我们确认要执行哪一个。
我们创建 HelloSbt.scala
测试类,然后在 IDEA 自带的终端中运行 sbt run
,示例如下:
通过官方文档的描述,我们知道:sbt 按照既定的约定工作 —— 它会自动找到以下内容:
项目根目录下的源文件
src/main/scala 或 src/main/java 中的源文件
src/test/scala 或 src/test/java 中的测试文件
src/main/resources 或 src/test/resources 中的数据文件
lib 中的 jar 文件
默认情况下,sbt 会用和启动自身相同版本的 Scala 来构建项目。
我们可以通过执行 sbt run
来运行项目,或者通过 sbt console
进入 Scala REPL。sbt console 已经帮我们设置好了项目的 classpath,所以我们可以根据项目实际运行 Scala 代码。
其他配置可参考:SBT 官方文档 (https://www.scala-sbt.org/0.13/docs/zh-cn/Hello.html)
6 - SBT 常用命令参考
命令 | 作用描述 |
clean | 删除所有生成的文件(在 target 目录下)。 |
compile |
编译源文件(在 src/main/scala 和 src/main/java 目录下)。 |
test |
编译和运行所有测试。 |
console |
进入到一个 包含所有编译的文件和所有依赖的 classpath 的 Scala 解析器。 输入 :quit , Ctrl+D (Unix),或者 Ctrl+Z (Windows) 返回到 sbt。 |
run <参数> |
在和 sbt 所处的同一个虚拟机上执行项目的 main class。 |
package |
将 |
reload |
重新加载构建定义( |
show <参数> |
显示想要看的信息,比如
|
help <命令> |
显示指定的命令的详细帮助信息。如果没有指定命令,会显示所有命令的简介。 |
- 点赞
- 收藏
- 关注作者
评论(0)