sbt版本问题

2020-06-16

之前明明跑起来的play_helloworld_sample不知道改了什么突然就提示找不到import的包了,所以花了一些时间来研究sbt的工作原理,虽然最终我现在还是不知道我到底做了什么弄坏了sample项目,但起码学到了一些很有用的知识:

sbt的版本问题

sbt的版本有两种:一种是sbt-launcher的版本,这个sbt位于以下位置:

ls -l /usr/local/bin/sbt   

或者

sbt sbtVersion  // 需在非sbt项目中运行

另一种是针对某一项目的sbt本身,这个sbt的版本通过项目下的project/build.properties控制。

sbt sbtVersion  // 在所在项目根目录中运行

因此一个sbt-launcher可以启动不同版本的sbt

库依赖的位置

sbt的库依赖分为托管依赖和非托管依赖。

大多数人会用托管依赖而不是非托管依赖,但是非托管依赖在起步阶段会简单很多,托管依赖只需要将jar文件放在 lib文件夹下,然后它们将会被添加到项目的classpath中。

sbt使用Apache Ivy来实现托管依赖,MAC下这些依赖被放置在/User/[用户名]/.ivy2/cache/

为sbt设置代理

terminal:shadowsocks -> 复制终端代理命令(command+c) -> 终端中粘贴

IDEA:setting - build - sbt - vm parms:

-DhttpProxyHost=192.168.31.52
-DhttpProxyPort=1087
-DhttpsProxyHost=192.168.31.52
-DhttpsProxyPort=1087

IDEA导入sbt项目

Open/Import -> 选择build.sbt文件 -> open as a project

.sbt构建定义

.sbt并非是一个完整的scala文件,而是一种DLS(Domain Specific Language, 领域特定语言),其通过key-map的方式建立有向图来描述构建的定义,另外在不同的上下文(scope)下,可能有不同的定义,详情请参见sbt-scala的官方教程