sbt教程

sbt类似maven,非常简单,想必大家接触它都是使用其编译scala。本文仅以构建scala项目为例,java项目原理一致,不多敖述。

1.Hello World

直接从源码构建

一个sbt工程可以只包含一个源文件,尝试建立一个文件夹名为hello,内部生成源文件hw.scala。

object Hi {
  def main(args: Array[String]) = println("Hi!")
}

接下来在hello文件夹内,执行命令sbt run即可编译执行scala源码。

</pre><pre name="code" class="plain">$ mkdir hello
$ cd hello
$ echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > hw.scala
$ sbt
...
> run
...
Hi!
在这个例子里,sbt工作方式十分简单,它会自动查找如下内容:

1.根目录下的源文件

2.src/main/scala中的源文件

3.src/test/scala中的源文件

4.src/main/resource/中的data文件

5.lib中的jar包


如果什么都不配置,sbt使用与编译自己相同版本的scala版本。

可以使用sbt (console)进入sbt命令行,其中可以执行诸如run,compile之类命令。


构建配置项

对于刚接触sbt的朋友最常去修改的配置文件,就是根目录下的build.sbt,后续会详细介绍。

设置sbt版本


修改project/build.properties
sbt.version=0.13.9

2.项目文件夹结构

sbt对项目的文档结构有所要求,这点还是很规范的,使得sbt构建的项目有良好的可读性。而且sbt文档架构是递归的,方便团队合作和较大项目的dispatch与merge。

根目录相关上文已经说了,包好配置文件和源码就可以直接跑了,当然,绝大多数开发者不把源码放在项目根目录下,太杂乱了,它应该这么放:

src/
  main/
    resources/
       <files to include in main jar here>
    scala/
       <main Scala sources>
    java/
       <main Java sources>
  test/
    resources
       <files to include in test jar here>
    scala/
       <test Scala sources>
    java/
       <test Java sources>
src中其它名字的文件会被直接无视。

根目录中有了build.sbt作文配置文件了,然而我们还可以在文件夹project中建立build.scala,编写一些构建依赖信息形成完整的构建定义。

build.sbt
project/
  Build.scala
有些时候您会看到project中也有.sbt文件,它的作用将在后面说明。

构建结果会被放在target文件夹中,故如果你使用git作代码管理,请在.gitignore中加入target/

3.编译执行

在项目根目录下输入sbt进入sbt提示符,其中可以输入相关指令如compile。也可以以批处理的方式运行sbt,注意如果有参数的指令参数和命令一起要用引号括上,如:
$ sbt clean compile "testOnly TestA TestB"
还有个比较积累的东西,~可以让sbt连续执行某命令,如在sbt提示符输入~ compile,则进入动态编译,sbt观察源文件变化随时编译。
常用的共有指令如下:
clean Deletes all generated files (in the target directory).
compile Compiles the main sources (in src/main/scala and src/main/java directories).
test Compiles and runs all tests.
console Starts the Scala interpreter with a classpath including the compiled sources and all dependencies. To return to sbt, type :quit, Ctrl+D (Unix), or Ctrl+Z (Windows).
run <argument>* Runs the main class for the project in the same virtual machine as sbt.
package Creates a jar file containing the files in src/main/resources and the classes compiled from src/main/scala andsrc/main/java.
help <command> Displays detailed help for the specified command. If no command is provided, displays brief descriptions of all commands.
reload Reloads the build definition (build.sbtproject/*.scalaproject/*.sbt files). Needed if you change the build definition.

4.sbt构建定义文件(Build definision)

有三种配置方式:裸sbt文件配置方式、复合项目sbt文件配置方式、scala文件配置方式。其中复合项目sbt文件配置方式最新出现,适合所有情况。
在build.sbt中,你可以建立一个放置在当前目录的项目的项目声明(project definition):
lazy val root = (project in file("."))
每一个项目都可以用一个永久的map来描述。构建定义不直接影响map。例如key是name,value是一个string对象内容为项目明。
然而,构建定义建立了一个巨大Setting[T]对象的队列,T是map alue的类型。一个Setting描述了一个对map的转换,例如添加一个新的key value对象或者补充一个已存在的值。对于永久数据结构和值,一些函数语言的转换返回新的map对象而不是替换它。
描述在当前目录的项目名称的Setting[String]可如下表示:
lazy val root = (project in file(".")).
  settings(
    name := "hello"
  )
Setting[String]通过添加key name转换map,赋值为hello。转换后的map成为sbt新map。
在build.sbt中,定义了一个Project,它维护了一个Scala表示的称作settings的队列。例如:
lazy val commonSettings = Seq(
  organization := "com.example",
  version := "0.1.0",
  scalaVersion := "2.11.4"
)

lazy val root = (project in file(".")).
  settings(commonSettings: _*).
  settings(
    name := "hello"
  )
每个Setting使用Scala定义,settings的描述彼此独立,仅被描述而不是声明。
build.sbt也可以使用vals,lazy vals,defs修饰。顶级别的object和class在build.sbt中不被允许。
Kyes有一个方法:=,返回一个Setting[T]。你可以使用类java的语法调用这个方法。Scala中直接使用:="hello"。







  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值