the summary of sbt
简介
sbt是一个专门用来编译scala工程的编译工具,其本身也是用scala实现。
github地址
安装与配置
安装
- 常用方法1:下载包
- 下载
- export环境变量到PATH即可
- 常用方法2:手动安装
- 下载sbt-launch.jar包
- 创建脚本:
bash
#!/bin/bash
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
- 添加可执行权限,并放入PATH中
- 常用方法1:下载包
配置
-Dsbt.boot.properties=path/sbt.boot.properties
-Dsbt.scala.version=2.10.4
:指定sbt使用的scala版本-Dsbt.override.build.repos=true
:sbt-launch.jar中有sbt.boot.properties文件,默认使用此文件,如果不设置此参数为true,即使指定第一个参数也不起作用-Dsbt.repository.secure=false
:是否使用https协议获取依赖信息等,这个在国内的复杂环境里就不要开了哈- `-Dsbt.ivy.home=path`:设置ivy存放及读取路径
- 工程配置
- 工程下的
project/build.properties
文件中,要根据sbt-launch.jar的版本,设置对应的版本号(sbt.version=0.13.13),否则会报错 - 工程下的
build.sbt
中,设置编译工程用的scala版本号(scalaVersion := “2.10.4”)
- 工程下的
- 默认是使用
${user.home}
路径下的.ivy2/
和.sbt/
两个文件夹下的相关配置,及存放依赖包和信息
sbt.boot.properties
文件解释
此文件包含5个部分,scala
app
repositories
boot
和ivy
。
scala
- 指定使用的scala版本号,一般使用默认
version: ${sbt.scala.version-auto}
app
- sbt的版本信息,使用默认
org: ${sbt.organization-org.scala-sbt}
name: sbt
version: ${sbt.version-read(sbt.version)[0.13.13]}
class: ${sbt.main.class-sbt.xMain}
components: xsbti,extra
cross-versioned: ${sbt.cross.versioned-false}
resources: ${sbt.extraClasspath-}
repositories
- 指定仓库源,即依赖的jar,使用的plugin要去哪里找并获取
local
:指去${sbt.ivy.home}/local/
路径下查找和保存依赖及plugin信息cache
:指去${sbt.ivy.home}/cache/
路径下查找和保存依赖及plugin信息typesafe-ivy-releases: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
- 这个是重点
- 表示,去指定的url下的
[organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]
这个路径下,去拿ivy.xml jar包 文档及源码信息 bootOnly
:使用sbt方式解析organization
部分
- 千万不要改成
mavenCompatible
,此配置,会使用mvn的方式去解析organization
- 例如:工程的
project/plugins.sbt
中添加1个pluginaddSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6")
- 使用bootOnly方式,会解析成
de.johoop/jacoco4sbt/scala_2.10/sbt_0.13/2.1.6
- 使用mavenCompatible方式,会解析成
de/johoop/jacoco4sbt/scala_2.10/sbt_0.13/2.1.6
,导致无法正确找到位置
- 使用bootOnly方式,会解析成
- 千万不要改成
maven-central
:指去mvn中央仓库去拉取依赖信息
boot
- 指定sbt运行的根路径,默认路径是
${user.home}/.sbt/boot/
- 存放运行sbt使用的scala版本及日志
update.log
- 指定sbt运行的根路径,默认路径是
ivy
- 指定ivy的路径,用于查找和存储ivy信息(解析工程依赖)
国内加速
如果想公共使用,在~/.sbt/路径下创建文件repositories,并将国内源放入即可。
[repositories]
local
cassandra: https://dl.bintray.com/spark-packages/maven/
ali: http://maven.aliyun.com/nexus/content/groups/public/
jcenter: http://jcenter.bintray.com/
sbt: http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/
typesafe_repo: http://repo.typesafe.com/typesafe/releases
typesafe-sbt-plugins: http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
typesafe-ivy-releases: http://dl.bintray.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
sonatype-oss-releases
maven-central
sonatype-oss-snapshots
可能一些理解有误,欢迎指正!