SBT无痛入门指南
SBT 是 Scala 的构建工具,全称是 Simple Build Tool, 类似 Maven 或 Gradle。 SBT 的野心很大,采用Scala编程语言本身编写配置文件,这使得它稍显另类,虽然增强了灵活性,但是对于初学者来说同时也增加了上手难度。另外由于SBT默认从国外下载依赖,导致第一次构建非常缓慢,使用体验非常糟糕! 如果你是一名Scala初学者,本文希望帮你减轻一些第一次使用的痛苦。
本文的主要内容是帮助初学者从头到尾构建并运行一个Scala项目,重点在于讲解国内镜像仓库的配置。对于每一个操作步骤,会分别针对Windows、Mac和Linux三个主流操作系统进行讲解, 最终帮助你快速构建一个可运行的Scala开发环境。
第一步:安装SBT
单击这里下载 SBT 1.3.0,下载完成后解压到指定目录,例如 D:\Software\sbt-1.3.0,然后将 D:\Software\sbt-1.3.0\bin 添加至环境变量PATH。SBT 1.3.0 采用 Coursier 以无锁的方式并行下载依赖,极大地提升了使用体验!
请确认本机已安装Java运行环境。
第二步:设置国内仓库,加快构建过程
1) 设置全局仓库
首先创建 .sbt 目录。
如果是Windows系统,则进入CMD执行如下命令:
cd C:\Users\USER_NAME mkdir .sbt cd .sbt
如果是Mac或Linux系统,则进入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-1.3.0/conf/ 目录下有两个配置文件, sbtconfig.txt 仅适用于 Windows 平台,而 sbtopts 仅适用于 Mac/Linux 平台。
针对 Windows 平台,打开 sbt-1.3.0/conf/sbtconfig.txt 文件,在末尾新增一行,内容如下:
-Dsbt.override.build.repos=true
针对 Mac/Linux 平台,打开 sbt-1.3.0/conf/sbtopts 文件,在末尾新增一行,内容如下:
-Dsbt.override.build.repos=true
方法二: 设置环境变量
在 Windows 上通过 set 命令进行设置,
set SBT_OPTS="-Dsbt.override.build.repos=true"
在 Mac/Linux 上使用 export 命令进行设置,
export SBT_OPTS="-Dsbt.override.build.repos=true"
方法三: 传入命令行参数
执行 sbt 命令时, 直接在命令后面加上配置参数,
sbt -Dsbt.override.build.repos=true
注意,如果由于某种原因, repositories 文件并不在默认的 .sbt 目录下,则需要通过 -Dsbt.repository.config 指定 repositories 文件的具体位置,该参数的三种设置方法同 -Dsbt.override.build.repos 。例如采用修改SBT配置文件方式 (推荐),则打开 sbt-1.3.0\conf\sbtconfig.txt 文件,在末尾新增如下内容:
-Dsbt.override.build.repos=true -Dsbt.repository.config=path_to_repositories_file
第三步:构建并运行第一个Scala项目
1)修改项目SBT构建版本
单击 hello-scala 下载一个最简单的Scala项目,并解压到指定目录,如 D:\idea-projects 。由于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构建版本是否为1.3.0,
sbt:hello-scala> sbtVersion [info] 1.3.0 sbt:hello-scala>
2)确认全局仓库是否已经覆盖项目自身仓库
sbt:hello-scala> show overrideBuildResolvers [info] true
确认仓库列表是否与 ~/.sbt/repositories 文件一致:
sbt:hello-scala> show fullResolvers
3)编译并运行
确认无误后执行编译命令,
sbt:hello-scala> compile [info] Compiling 1 Scala source to D:\idea-projects\hello-scala\target\scala-2.12\classes ... [success] Total time: 4 s, completed 2019-9-16 11:39:41
查看SBT本地缓存,确认一下是否从国内仓库下载依赖。针对不同的操作系统,对应的缓存路径如下:
- Windows缓存路径是 %LOCALAPPDATA%\Coursier\Cache\v1 ,即如果用户名是joymufeng,则完整路径是 C:\Users\joymufeng\AppData\Local\Coursier\Cache\v1 。
- Linux缓存路径为 ~/.cache/coursier/v1 。
- Mac缓存路径为 ~/Library/Caches/Coursier/v1 。
下面是Windows缓存截图:
最后执行项目,

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源中国客户端 Android 10 经验适配指南,含代码
我们App的适配从 targetSdkVersion = 26跨版本升级到29,因此会遇到大量的坑,最终的版本配置如下: 现在进入填坑适配指南,包含实际经验代码,绝不照搬翻译文档 1.Region.Op相关异常:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed 当targetSdkVersion >=Build.VERSION_CODES.P 时调用 canvas.clipPath(path, Region.Op.XXX); 引起的异常,参考源码如下: @Deprecated public boolean clipPath(@NonNull Path path, @NonNull Region.Op op) { checkValidClipOp(op); return nClipPath(mNativeCanvasWrapper, path.readOnlyNI(), op.nativeInt); } private static vo...
- 下一篇
网络七层模型与TCP/UDP
为了使全球范围内不同的计算机厂家能够相互之间能够比较协调的进行通信,这个时候就有必要建立一种全球范围内的通用协议,以规范各个厂家之间的通信接口,这就是网络七层模型的由来。本文首先会对网络七层模型的功能进行介绍,然后会讲解传输层的两个重要协议:TCP和UDP协议,并且会着重讲解TCP协议中的三次握手和四次挥手的过程。 1. 网络七层模型 关于网络七层模型,我们首先以一个图例来展示其功能: 应用层:主要指的是应用程序部分,比如我们的Java程序,应用层所产生的数据成为应用层数据,典型的应用层协议,比如有HTTP协议,dubbo的rpc协议,这些都是由我们的应用层程序自己定义的; 表示层:这一层主要是对应用层的数据进行一些格式转换,加解密或者进行压缩和解压缩的功能; 会话层:会话层的主要作用是负责进程与进程之间会话的建立、管理以及终止的服务; 传输层:传输层提供了两台机器之间端口到端口的一个数据传输服务,因为应用层、表示层和会话层所针对的都是某个应用进程,而进程是和端口绑定的,但是同一台服务器上是可以有多个进程的,因而传输层提供的就是这种不同的端口到端口的访问,以实现区分不同进程之间的通信服...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7设置SWAP分区,小内存服务器的救世主
- Mario游戏-低调大师作品
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题