【多图预警】Windows 安装 SBT、IDEA 使用 SBT 构建项目指南

举报
痩风 发表于 2020/08/07 11:34:23 2020/08/07
【摘要】 SBT,Simple Build Tool,恰如其名,是一款简单的、高效的、交互式的命令行构建工具。 本文通过详细的图片演示 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

将 src/main/resources 下的文件和 src/main/scala 以及 src/main/java中编译出来的 class 文件打包成一个 jar 文件。

reload

重新加载构建定义(build.sbt, project/*.scala, project/*.sbt 这些文件中定义的内容)。在修改了构建定义文件之后需要重新加载。

show <参数>

显示想要看的信息,比如 show name:查看当前项目的名字,

show libraryDependencies:查看当前项目依赖的库。

help <命令> 显示指定的命令的详细帮助信息。如果没有指定命令,会显示所有命令的简介。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。