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

本文的主要内容是帮助初学者从头到尾构建并运行一个Scala项目,重点在于讲解国内镜像仓库的配置。对于每一个操作步骤,会分别针对Windows、Mac和Linux三个主流操作系统进行讲解, 最终帮助你快速构建一个可运行的Scala开发环境。

第一步:安装SBT

单击这里下载 SBT 1.4.4(Linux版),下载完成后解压到指定目录,例如 D:\Software\sbt-1.4.4,然后将 D:\Software\sbt-1.4.4\bin 添加至环境变量PATH。SBT 1.4.4 采用 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.4.4/conf/ 目录下有两个配置文件, sbtconfig.txt 仅适用于 Windows 平台,而 sbtopts 仅适用于 Mac/Linux 平台。

针对 Windows 平台,打开 sbt-1.4.4/conf/sbtconfig.txt 文件,在末尾新增一行,内容如下:

-Dsbt.override.build.repos=true

针对 Mac/Linux 平台,打开 sbt-1.4.4/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.4.4\conf\sbtconfig.txt 文件,在末尾新增如下内容:

-Dsbt.override.build.repos=true
-Dsbt.repository.config=path_to_repositories_file

如:

下面的配置是画蛇添足,默认就是这样的配置。仅作演示用。

vim /home/zxl/develop/sbt/conf/sbtopts

-Dsbt.override.build.repos=true
-Dsbt.log.format=true
-Dsbt.boot.directory=/home/zxl/.sbt/boot
-Dsbt.ivy.home=/home/zxl/develop/sbt/.ivy2
-Dsbt.global.base=/home/zxl/.sbt
-Dsbt.repository.config=/home/zxl/.sbt/repositories

第三步:构建并运行第一个Scala项目

1)修改项目SBT构建版本

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

sbt.version = 1.4.4

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

第一次进入 sbt shell 时,由于需要下载相关依赖,大概需要几十秒时间,第二次及以后进入 sbt shell 会很快。

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

sbt:hello-scala> sbtVersion
[info] 1.4.4
sbt:hello-scala>

2)确认全局仓库是否已经覆盖项目自身仓库

sbt:hello-scala> show overrideBuildResolvers
[info] true

确认仓库列表是否与 ~/.sbt/repositories 文件一致:

sbt:hello-scala> show fullResolvers

3)编译并运行

编写一小段代码作为演示用:

$ mkdir hello
$ cd hello
$ echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > demo1.scala

确认无误后执行编译命令,

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缓存截图:

下面是Linux的缓存路径:

~/.cache/coursier/v1/https/

zxl@debian:~/IdeaProjects/hello$ ls ~/.cache/coursier/v1/https/
repo.huaweicloud.com
zxl@debian:~/IdeaProjects/hello$

最后执行项目,

Windows:

Linux:

#编译
sbt:hello> compile
[warn] scala-xml_2.12-1.0.6.jar no longer exists at /home/zxl/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.0.6/scala-xml_2.12-1.0.6.jar
[info] Updating
https://repo.huaweicloud.com/repository/maven/org/scala-lang/scala-library/2.12.12/scala-library-2.12.12.pom100.0% [##########] 1.6 KiB (2.5 KiB / s)
[info] Resolved  dependencies
[info] Updating
https://repo.huaweicloud.com/repository/maven/org/scala-lang/scala-compiler/2.12.12/scala-compiler-2.12.12.pom100.0% [##########] 2.6 KiB (12.5 KiB / s)
......#运行
sbt:hello> run
[info] running Hi
Hi!
[success] Total time: 0 s, completed 2020年12月12日 下午12:07:41
sbt:hello>

sbt1.4.4配置国内镜像源实操教程(无痛入门)相关推荐

  1. Python安装某个库,出现Read_Time_out错误,那么如何配置 “国内镜像源”呢?

    来源/快学Python 作者/黄伟呢 问题来源 今天在使用pip install xlutils安装xlutils包的时候,一直出现如下错误: ReadTimeoutError: HTTPSConne ...

  2. Mac全自动安装brew一键配置国内镜像源

    M1版本 安装homebrew 官网方法:macOS(或 Linux)缺失的软件包的管理器 - Homebrew /bin/bash -c "$(curl -fsSL https://raw ...

  3. Linux:ARM+lUbuntu16.04配置国内镜像源

    Linux:ARM+lUbuntu16.04配置国内镜像源 说明: 1.备份: 2.修改: 清华源 阿里源 3.更新: 说明: 因为x86平台上的镜像源和ARM平台上的镜像源是不能通用的,所以需要配置 ...

  4. android studio 镜像服务器设置,Android studio配置国内镜像源的实现

    PS:网上看到的AS配置国内镜像源的博客版本有点老了,就想着做个比较新的博客了 推荐的几个国内镜像源地址: 1.东软信息学院(笔者当前在用) mirrors.neusoft.edu.cn     端口 ...

  5. Windows Docker 配置国内镜像源的两种方法

    Windows Docker配置国内镜像源的两种方法 更新时间 2022.04.14 通过Docker-Desktop界面操作和修改daemon.json两种方法配置国内镜像源 方法一:通过Docke ...

  6. Python-pip配置国内镜像源

    Python-pip配置国内镜像源 推荐的国内镜像站 [ 个人推荐清华大学pypi镜像站(https://mirrors.tuna.tsinghua.edu.cn/help/pypi/),每五分钟同步 ...

  7. pip配置国内镜像源——最新详尽版

    国内镜像源 pip如果不配置国内镜像源的话,下载包的速度非常慢,毕竟默认的源在国外呢,国内主要的镜像源有如下,其中我个人喜欢用阿里云的镜像源. 阿里云 http://mirrors.aliyun.co ...

  8. Anaconda配置国内镜像源

    1. 为conda配置(清华)镜像源 使用conda进行安装时,访问的是国外的网络,所以下载和安装包时会特别慢.我们需要更换到国内镜像源地址,这里我更换到国内的清华大学地址.(永久添加镜像) Wind ...

  9. Conda配置国内镜像源

    Conda配置国内镜像源 # 换回默认源(清除所有用户添加的镜像源路径,只保留默认的路径) conda config --remove-key channels vim ~/.condarc .con ...

最新文章

  1. 多线程中的使用共享变量的问题
  2. Python常用网页字符串处理技巧
  3. 昨天电脑问题 补昨日8-3复习内容 异常与文件操作
  4. 审查元素上传php,KindEditor上传解析漏洞/列目录/内容漏洞_PHP教程
  5. QT Windows下生成动态链接库
  6. 降序php,以降序php读取文件
  7. MPC(模型预测控制)之二(路径规划)
  8. 大话数据结构之数据结构
  9. CI restful小试(二)
  10. 问题三十三:怎么用ray tracing画特殊长方体(box)
  11. 最长公共子序列长度以及打印(动态规划入门)
  12. 1 dhcp服务器的配置文件,Linux1 DHCP服务器配置 主配置文件(dhcpd.conf)
  13. 我想用人工智能留住父亲
  14. 1.Grettings and Introductions
  15. Evolutionary Acyclic Graph Partition
  16. SAP Commerce Cloud Github 仓库管理规范
  17. 12月15日(第12天)
  18. Apache与文件解析漏洞详解
  19. uri中为什么本地文件file后面跟三个斜杠, http等协议跟两个斜杠?
  20. Window对象的说明》

热门文章

  1. 51nod 1022 石子合并v2
  2. 【Python】利用 Python 实现多任务进程
  3. 【机器学习基础】机器学习中类别变量的编码方法总结
  4. 如何只使用标签来构建一个简单的电影推荐系统
  5. 太强了!Kaggle竞赛宝典方案汇总
  6. 我的随笔---高亮规范
  7. 微信小程序数据过滤(filter)方法
  8. Maven引入外部jar的几种方法
  9. 项目管理 - 学习总目录
  10. flask开发问题小记