SBT = Simple Build Tool。用 Scala 编写的一个通用的构建工具,管理项目依赖的 JAR 包,从 Maven 下载。
可以在工程的上下文里启动 REPL (read-eval-print-loop,就是交互式解释器)。
一般用来管理 Scala 项目,类似 Maven 与 Java 的关系。
下载:
wget https://github.com/sbt/sbt/releases/download/v1.0.3/sbt-1.0.3.tgz
tar xvf sbt-1.0.3.tgz
cd sbt/
新建程序 /usr/local/bin/sbt
:
#!/usr/bin/bash
SBT_OPTS="-Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar /home/vagrant/apps/sbt/bin/sbt-launch.jar "$@" # 修改路径
设置国内仓库,新建 ~/.sbt/repository
:
[repositories]
local
oschina:http://maven.oschina.net/content/groups/public/
oschina-ivy:http://maven.oschina.net/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
repo2:http://repo2.maven.org/maven2/
ivy-typesafe:http://dl.bintray.com/typesafe/ivy-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
ivy-sbt-plugin:http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
typesafe-releases: http://repo.typesafe.com/typesafe/releases
typesafe-ivy-releasez: http://repo.typesafe.com/typesafe/ivy-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
运行如下指令创建项目框架:
sbt new sbt/scala-seed.g8 # 要等一会儿。根据提示输入项目名称,比如 hello
产生目录结构如下:
$ tree
.
├── hello
│ ├── build.sbt
│ ├── project
│ │ ├── build.properties
│ │ └── Dependencies.scala
│ └── src
│ ├── main
│ │ └── scala
│ │ └── example
│ │ └── Hello.scala
│ └── test
│ └── scala
│ └── example
│ └── HelloSpec.scala
└── target
运行:
$ cd hello
$ sbt
> run
> package # 生成 JAR 包
> exit
sbt -debug run
新建 ~/.sbt/repositories
:
[repositories]
central-maven-org: http://central.maven.org/maven2/
或者使用命令选项:
sbt -Dsbt.repository.config=http://central.maven.org/maven2/ run
禁止使用指定仓库以外的仓库(包括默认的)可以再增加选项:
-Dsbt.override.build.repos=true
或者将选项全部放入项目顶层目录的 .sbtopts
文件中:
-Dsbt.repository.config=http://central.maven.org/maven2/
-Dsbt.override.build.repos=true
使用环境变量:
env JAVA_OPTS="-Xmx512m" sbt run
或者新建 /usr/local/etc/sbtopts
(>= sbt-0.13.6):
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
或者用命令选项 -J
:
sbt -J-Xmx2048 -J-XX:MaxPermSize=512 run
或者在 build.sbt
中设置:
javaOptions += "-Xmx1G"
javaOptions in Test += "-Xmx1G"
sbt sbtVersion # 项目 sbt 版本
sbt version # 项目版本
sbt about # 项目信息
下面两种写法都可以,前一种给出了 scala 版本,后一种根据项目的设置自动添加。
libraryDependencies += "org.scala-tools" % "scala-stm_2.11.1" % "0.3"
libraryDependencies += "org.scala-tools" %% "scala-stm" % "0.3"
~/.ivy2/cache
Ivy 是一个 Apache 项目,通过描述文件可自动解决 Maven 仓库中的包之间的依赖关系。
在 项目/project/build.properties
中可以强制使用指定版本的 sbt:
sbt.version=0.12.0
配置出错了。当前配置和依赖描述的语法是否符合 sbt 版本。
运行 sbt 命令的目录不对,正确的目录下有 *.sbt
文件。
运行 Spark 任务时报错。