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

网友投稿 1839 2022-05-29

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 —— 注意不要覆盖其他变量。

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

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 常用命令参考

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

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

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

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

Scala 编译构建 CloudBuild

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Linux C编程】第九章 目录操作相关函数
下一篇:C 语言面向对象的封装方式(示例)
相关文章