1) 学习Scala的第一个hello程序

	hw.scala

1. 首先，设置SBT（Simple Build Tool），从 http://scala-sbt.org下载适合工作平台的安装包并安装之，检查确认PATH路径是否已经设置，确保可在任意目录下执行命令: sbt。
G:\workspace\ScalaStudy>sbt
[info] Set current project to scalastudy (in build file:/G:/workspace/ScalaStudy/)
>

2. 在SBT中运行我的第一个hello程序：
> run
[info] Compiling 1 Scala source to G:\workspace\ScalaStudy\target\scala-2.10\classes...
[info] Running Hi
Hi!
[success] Total time: 6 s, completed 2013-8-21 18:41:33
>

3. 检查当前SBT版本号：
> sbt-version
[info] 0.13.0-RC5
> about
[info] This is sbt 0.13.0-RC5
[info] The current project is {file:/G:/workspace/ScalaStudy/}scalastudy 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.2
[info]
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.2
>
2) 将hw.scala转移到src/main/scala/中  (规范化开发的要求)

SBT会在如下目录下自动查找：
•在根目录下查找源码
•在src/main/scala 或 src/main/java 中查找源码
•在src/test/scala 或 src/test/java 中查找测试代码
•在src/main/resources 或 src/test/resources 中查找数据文件
•在lib中查找jar包
3）交互式项目配置（sbt提示符下）

1.设置项目名
> set name := "study"
[info] Defining *:name
[info] The new value will be used by *:description, *:normalizedName and 6 others.
......
>

2.设置项目版本号
> set version := "0.1"
[info] Defining *:version
[info] The new value will be used by *:isSnapshot, *:projectId and 3 others.
[info]  Run `last` for details.
......
>

3.设置scalac编译选项
> set scalacOptions ++= Seq("-unchecked", "-deprecation")
[info] Defining *:scalacOptions
[info] The new value will be used by compile:scalacOptions
......
>

4.将配置保存在build.sbt中
> session save
......
>

5.当然也可以直接在build.sbt文件中配置

6.如果需要的话，还可以类似配置：scala-version（scala版本号）

7.这里，scala-version的默认值：
> show scala-version
>

8.重启sbt或reload后会生成一个目录project,可在其中对项目进行进一步的配置...
4）添加Eclipse插件(IDE)：sbt-eclipse

	project/plugins.sbt

在sbt提示符下执行：
> eclipse
[info] About to create Eclipse project files for your project(s).
.......
>

注意：
1. 如果没有子项目，生成的eclipse项目配置会在根目录下。

2. 如果有子项目，默认情况下，会跳过父项目，只会在子项目目录下生成配置。  如果你不希望跳过，可以在父项目的.sbt中配置：
EclipseKeys.skipParents in ThisBuild := false

3. 如果你希望跳过某个子项目，你可以在该项目的.sbt中配置：
EclipseKeys.skipProject := true
5）添加Sublime插件(IDE)：sbt-sublime

	project/plugins.sbt

在sbt提示符下执行：
> gen-sublime
[info] About to create Eclipse project files for your project(s).
.......
>

执行完毕后，会生成一个.sublime-project的文件，在Sublime中打开即可进入IDE
6）将sbt-eclipse和sbt-sublime这两个插件共享

	project/plugins.sbt  -》  ~/.sbt/0.13/plugins/plugins.sbt

注意：
  1） ~/.sbt/0.13/plugins/中的.sbt 相当于在任意项目子目录project/中放同样的文件
  2） ~/.sbt/0.13/plugins/project/中的.scala 相当于在任意项目的目录project/project/中放同样的文件
7）子项目支持（可以配置多个子项目）

1. 将当前项目移动到子项目demo中

     project/build.scala

   进入sbt提示符 或 reload后，项目根目录下会自动生成的子目录demo。

2. 重新执行eclipse 和  gen-sublime

*Notes* 运行移到子项目下的hello程序
  demo/compile:run
8）引入自动测试工具ScalaCheck

1. 配置：build.sbt

2. 重启SBT，或 reload

3. 运行测试指令（目前没有任何测试代码）
> test
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] Passed: Total 0, Failed 0, Errors 0, Passed 0
[info] No tests to run for scala-study/test:test
[info] No tests to run for demo/test:test
[success] Total time: 0 s, completed 2013-8-21 22:20:01
>

4.重新执行gen-sublime
8）ScalaCheck测试Demo

	demo/src/test/scala/ScalaCheckDemo.scala

最后一个测试案例应该测试不通过
8）自定义ScalaCheck数据发生器

	demo/src/test/scala/EitherSpecification.scala

为了测试scala.Either,而自定义Either数据发生器

在SBT中测试 （默认测试100次)
>test

在SBT中测试 （自定义测试次数-500次)
>test-only -- -s 500

在SBT中测试 （只测试指定类)
>test-only EitherSpecification
9）引入自动测试工具JUnit

1. 配置：build.sbt

2. 重启SBT，或 reload
9）JUnit测试-DI实现技术之"Cake pattern"
9）JUnit测试-DI实现技术之“Structural typing”
9）JUnit测试-DI实现技术之“Implicit parameters”
9）JUnit测试-DI实现技术之“函数式DI”
10）引入自动测试工具Specs2

1. 配置：build.sbt

2. 重启SBT，或 reload
10）Specs2测试 - unit specifications
10）Specs2测试 - acceptance specifications
9）JUnit测试-DI实现技术之“DI框架--Spring”（好像无效？？有待研究？？）
10）Specs2测试--错误修正

相关commit:
10）Specs2测试 - acceptance specifications
10）Specs2测试 - unit specifications