轻快的SBT
Sbt是当前Scala项目的标准构建工具
Sbt是当前Scala项目的标准构建工具
The interactive build tool
Use Scala to define your tasks. Then run them in parallel from the shell.
or
S(i) B(ian) T(ai)
:=
, +=
, ++=
, <<=
*.sbt
, project/*.scala
, ~/.sbt/0.13/plugins/*
settingKey
, taskKey
, inputKey
project scope
, config scope
, inkey scope
让我们开始SBT轻快之旅吧!
安装:
brew install sbt
升级:
brew update sbt
touch Hello.scala
内容如下:
object Hello extends App {
println("Hello, sbt!")
}
运行:
$ sbt run
Hello, sbt!
~/.sbt/0.13/plugins/np.sbt
resolvers += Resolver.url("sbt-np",
url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(
Resolver.ivyStylePatterns)
addSbtPlugin("me.lessis" % "np" % "0.2.0")
~/.sbt/0.13/np.sbt
seq(npSettings: _*)
$ sbt np
生成:
├── build.sbt
└── src
├── main
│ ├── resources
│ └── scala
└── test
├── resources
└── scala
build.sbt
organization := "mytest"
name := "default"
version := "0.1-SNAPSHOT"
build.sbt
resolvers ++= Seq(
"ibiblio" at "http://mirrors.ibiblio.org/pub/mirrors/maven2",
"Sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/",
"Sonatype releases" at "http://oss.sonatype.org/content/repositories/releases"
)
libraryDependencies ++= Seq(
"org.scalaz" %% "scalaz-core" % "7.1.0",
"org.specs2" %% "specs2" % "2.3.13" % "test"
)
$ sbt
> update
> gen-idea
~/.sbt/0.13/plugins/sbt-idea.sbt
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
不下载源代码
$ sbt gen-idea
下载源代码:
$ sbt
> gen-idea sbt-classifiers
用idea打开:
idea .
curl -s https://raw.githubusercontent.com/paulp/sbt-extras/master/sbt > sbt
chmod 0755 sbt
$ ./sbt
Downloading sbt launcher for 0.13.6:
From http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.6/sbt-launch.jar
To /Users/freewind/.sbt/launchers/0.13.6/sbt-launch.jar
Getting org.scala-sbt sbt 0.13.6 ...
:: retrieving :: org.scala-sbt#boot-app
confs: [default]
44 artifacts copied, 0 already retrieved (13750kB/150ms)
[info] Loading global plugins from /Users/freewind/.sbt/0.13/plugins
[info] Updating {file:/Users/freewind/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.scala-sbt.ivy#ivy;2.3.0-sbt-14d4d23e25f354cd296c73bfff40554[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to default (in build file:/private/tmp/mytest/)
更多:
http://www.scala-sbt.org/0.13/docs/Community-Plugins.html
$ sbt
> np name:root
> np name:core dir:core
> np name:util dir:util
├── build.sbt
├── src
│ ├── main
│ │ ├── resources
│ │ └── scala
│ └── test
│ ├── resources
│ └── scala
├── core
│ ├── build.sbt
│ └── src
└── util
├── build.sbt
└── src
build.sbt
lazy val core = project
lazy val util = project
build.sbt
name := "hello"
version := "1.0"
organization := "org.my"
scalaVersion := "2.11.0"
sbtVersion := "0.13.5"
:=
给一个key赋值*.sbt
, *.scala
, project/*.sbt
, project/*.scala
内容合并lazy val hello = taskKey[Unit]("An example task")
hello := { println("Hello, world") }
$ sbt
> hello
Hello, world!
lazy val showRootFiles = taskKey[Unit]("Show root files")
showRootFiles := {
baseDirectory.value.listFiles.foreach(println)
}
$ sbt
> showRootFiles
/private/tmp/mytest/.idea
/private/tmp/mytest/.idea_modules
/private/tmp/mytest/.sbt
/private/tmp/mytest/build.sbt
/private/tmp/mytest/core
/private/tmp/mytest/project
/private/tmp/mytest/src
/private/tmp/mytest/target
/private/tmp/mytest/util