Scala sbt系列1——菜鸟初学 scala sbt

系统:macOS 10.12.5

一、Scala sbt

SBT 是 Scala 的构建工具,全称是 Simple Build Tool, 类似 Maven 或 Gradle。 SBT 的野心很大,采用Scala编程语言本身编写配置文件,这使得它稍显另类,虽然增强了灵活性,但是对于初学者来说同时也增加了上手难度。另外由于SBT默认从国外下载依赖,导致第一次构建非常缓慢,使用体验非常糟糕!

如果需要看 windows 版本的可看参考文档 SBT无痛入门指南

下载 SBT

下载 SBT 1.3.0,下载后解压到指定目录,例如 /Users/haizhi/myapp/sbt-1.3.0,然后在 ~/.bash_profile 中将 /Users/haizhi/myapp/sbt-1.3.0 添加至环境变量PATH。

[~/.bash_profile]末尾加入下面两行
export SBT_HOME=/Users/haizhi/myapp/sbt-1.3.0
export PATH=$PATH:$SBT_HOME/bin

SBT 1.3.0 采用 Coursier 以无锁的方式并行下载依赖,极大地提升了使用体验!

请确认本机已安装Java运行环境。

设置国内仓库,加快构建过程

1.设置全局仓库

首先创建 .sbt 目录。进入Bash执行如下命令:

cd  ~
mkdir  .sbt
cd  .sbt

然后创建 repositories 文件内容如下,并将文件拷贝到 .sbt 目录下,

[repositories]
local
huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
maven-central: https://repo1.maven.org/maven2/
sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
2.设置所有项目均使用全局仓库配置,忽略项目自身仓库配置

该参数可以通过 Java System Property 进行设置。在 SBT 中,有三种方法可以设置 Java System Property,可以根据需要自行选择。分别为修改SBT配置文件、设置环境变量、传入命令行参数,这里我只用了修改 SBT 配置文件的方式,如需要使用其他两种方式,可以看参考文档 SBT无痛入门指南

提醒一下, sbt-1.3.0/conf/ 目录下有两个配置文件, sbtconfig.txt 仅适用于 Windows 平台,而 sbtopts 仅适用于 Mac/Linux 平台。

修改SBT配置文件
打开 sbt-1.3.0/conf/sbtopts 文件,在末尾新增一行,内容如下:

-Dsbt.override.build.repos=true

bug小插曲
这里出现了一个问题,在输入 sbt shell 的时候,报错如下。

[error] [launcher] error during sbt launcher: label local is not in a section

看这里报错是 sbt launcher 的问题,在 sbt入门 中提供的 sbt-launch.jar 地址,重新下载了 launch ,将之前的 sbt-launch.jar 更名为 sbt-launch.jar_bak,并将新下载的放入 bin 目录下。
还是如下报错。

[error] [launcher] error during sbt launcher: label local is not in a section

同事帮忙分析错误,判断应该是 local 这个标签,sbt 无法识别,再寻找配置有 local 的地方,是在配置 repositories 的时候,没有加上第一行 [repositories] ,导致 local 变成第一行,系统无法识别。在repositiries 中加入了第一行后就可以正常下载了。

一个小插曲,也应证了一个思想,越是所有人没有出现的错误,就越是脑残和智障类型的错误。


构建并运行第一个Scala项目

1.修改项目SBT构建版本

单击 hello-scala下载一个最简单的 Scala 项目,并解压到指定目录,如 /Users/haizhi/IdeaProjects/ 。由于SBT 1.3.0包含了多项性能提升,如果是已有的本地项目,请手动将项目的SBT构建版本改成1.3.0 。具体方法为:打开 project/build.properties 文件,将内容修改如下:

sbt.version = 1.3.0

在命令行中切换至 hello-scala 目录,执行sbt命令进入 sbt shell 。

第一次进入 sbt shell 时,由于需要下载相关依赖,大概需要几十秒时间,第二次及以后进入 sbt shell 会很快。 当出现 sbt:hello-scala> 的时候就表示可以进行 sbt 交互了。如下图所示。

sbt 下载完所有相关依赖后的界面

检查当前项目的SBT构建版本是否为1.3.0

sbt:hello-scala> sbtVersion
[info] 1.3.0
2.确认全局仓库是否已经覆盖项目自身仓库
sbt:hello-scala> show overrideBuildResolvers
[info] false

false 为未覆盖项目自身仓库,网上查询后得到一个说法

sbt 的自定义 resolvers 被-Dsbt.override.build.repos=true 覆盖掉了

现在将 show overrideBuildResolvers 的结果改为 true 的事情先放一放,后续再补上。

3.确认仓库列表是否与 ~/.sbt/repositories 文件一致:
sbt:hello-scala> show fullResolvers
[info] * Raw(ProjectResolver(inter-project, mapped: ))
[info] * FileRepository(local, Patterns(ivyPatterns=Vector(${ivy.home}/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), artifactPatterns=Vector(${ivy.home}/local/[organisation]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)([branch]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), isMavenCompatible=false, descriptorOptional=false, skipConsistencyCheck=false), FileConfiguration(true, None))
[info] * huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
[info] * maven-central: https://repo1.maven.org/maven2/
[info] * URLRepository(sbt-plugin-repo, Patterns(ivyPatterns=Vector(https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), artifactPatterns=Vector(https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]), isMavenCompatible=false, descriptorOptional=false, skipConsistencyCheck=false), false)
[success] Total time: 0 s, completed 2020-5-8 16:26:41

一共有3个仓库,huaweicloud-mavenmaven-centralURLRepository,都可以打开并访问下载内部的资源,与我们之前配置的 repositories 是一致的。

4.编译

确认无误后执行编译命令,之前下载过依赖,所以现在编译比较快。

sbt:hello-scala> compile
[info] Compiling 1 Scala source to /Users/haizhi/IdeaProjects/hello-scala/target/scala-2.12/classes ...
[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.8. Compiling...
[info]   Compilation completed in 12.231s.
[success] Total time: 26 s, completed 2020-5-8 16:30:30

查看SBT本地缓存,确认一下是否从国内仓库下载依赖。针对不同的操作系统,对应的Mac缓存路径如下:

~/Library/Caches/Coursier/v1 。

在 Caches 文件夹下面未能找到 Coursier 文件夹。

5.运行

最后运行 sbt 项目。

sbt:hello-scala> run
[info] running hello.Hello
Hello, Scala
[success] Total time: 0 s, completed 2020-5-8 16:42:20

[info] 下面为输出的结果,第一个 Scala sbt 项目运行成功。


附件

参考文档:
SBT无痛入门指南 https://zhuanlan.zhihu.com/p/82727108
sbt 入门 https://www.cnblogs.com/cbscan/articles/4194231.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值