2018-05-31

1、安装

   Window安装:

       msi安装包 https://piccolo.link/sbt-0.13.16.msi

       手动安装:https://piccolo.link/sbt-0.13.16.zip

           1、解压,配置环境变量:SBT_PATH=解压路径, PATH=%PATH%;%SBT_PATH%

    Linux安装:

        1、将sbt-launch.jar (http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.5/sbt-launch.jar)包放到目录 ~/bin中

         2、创建一个运行jar包的脚本 ~/bin/sbt, 脚本内容为:

               SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled-XX:MaxPermSize=256M"

               java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

          3、确保脚本有执行权限

               $ chmod u+x ~/bin/sbt


2、常用命令

    进项目根目录,执行 sbt会生成 target 目录,结构如下:

       target

       ├──scala-2.10

       │   ├──classes

       │   └──resolution-cache

       └──streams

           ├──compile

           ├──$global

           ├──runtime

           └──test

    注意:配置项目版本控制项目的 .gitignore文件中应该包含 target/ , 注意:以 / 结尾(匹配目录中所有目录和文件)并且开头不包含/ (为了匹配 project/target/)  


   clean                       :删除所有构建生成的文件(在target目录中)

    compile                  :编译项目源代码(编译src/main/scala 和 src/main/java 目录下的源代码)

   test                          :编译并运行所有的测试用例

    console                   :启动一个 Scala 语言交互模式, sbt 在启动的时候会指定依赖的所有classpath, 

                                    返回 sbt 可以用 :quit 、 Ctrl+D (Unix) 和Ctrl+Z (Windows)

   run *                         :运行项目在虚拟机中

    package                   :创建一jar 包其中包含src/main/resources 和编译 src/main/scala 或 src/main/java 目录的 class 文件

    help                         :显示指定命令的帮助信息,如果没有指定命令将显示所有的命名的摘要信息。

    reload                     :重新加载配置文件(build.sbt,project/.scala 和 project/.sbt 文件),当修改配置文件的时候需要执行

    ~compile                  :监视文件的改变

    assembly                 :项目使用sbt-assembly来将工程class和依赖打到一个jar包中,   类似maven的assembly

                                       (需要在项目根目录/project/plugins.sbt添加 addSbtPlugin(“com.eed3si9n” % “sbt-assembly” % “0.14.4”) 插件)


    注意:当按一次 Tab 键是 sbt 会显示所有可能匹配的子集命令,当按多次 Tab 后将显示多个可能匹配的命令进行选择的提示,和 Unix tab 补全规则基本一致


3、配置文件

   SBT基本概念:

         SBT会根据当前项目的配置文件得到一个哈希映射表来描述整个项目,然后当你输入表中一个Key的名字时,sbt就会执行该key对应的任务(或者显示对应的值)。

         项目的配置文件首先会生成一个大的配置列表 Seq[Setting],这个列表中每一个setting是对项目哈希表的一个更新,

         会生成一个新的哈希表替换原来的哈希表,SBT实际生成该哈希表的时候会先对Seq[Setting]中的配置进行一下优化调整,

        将对相同key的setting放到一起,同时被依赖的key放前面。


        SBT的Key共有三种类型:

         SettingKey[T]:这类key 的值只计算一次(当加载项目的时候计算完成后将一直保留)

        内建 Keys 是调用对象 Keys 的成员变量,对于 build.sbt 隐式包含

        import sbt.Keys._ , 所以 sbt.Keys.name 可以写作name

           e.g:

                name := "xxx"

                version := "1.0"

                scalaVersion :="2.12.2"

                mainClass :=Some("xxxx")

               selectMainClass :=Some("xxx")

                assemblyJarName :="xxxx.jar"

                assemblyOutputPath :=baseDirectory.value

                logLevel := Level.Info

                fork := true

        TaskKey[T]:这类 key 的值将被作为任务调用,可以被重复调用计算的,也可能会产生影响

           e.g:

                lazy val switchTask =taskKey[String]("Switch Jrebel By Platform !")

                switchTask :=System.getProperty("os.name").toUpperCase

                javaOptions += {

                  if(switchTask.value.contains("WINDOWS")) {

                    println("is windowsplatform")

                    "-agentpath:" +baseDirectory.value / "jrebel64.dll"

                  } else {

                    println("is linuxplatform")

                    "-agentpath:" +baseDirectory.value / "libjrebel64.so"

                  }

                }

        InputKey[T]:这类key 是针对一个任务需要传递一些输入参数

            e.g:

                key3 := {

                       val args: Seq[String] =spaceDelimited("").parsed

                      args.mkString("-")

                }


4、配置参数方法

    配置项

        一个工程构建定义一个Setting 类型的列表,通过sbt转化为sbt的描述数据结构(key-value 键值对),Setting作为一个转化前的输入类          型,转化后输出一个 map表。

       一个 Setting类型的配置项可以通过 := 转化成一个值为一个常量的map表

    配置值追加操作: += 和++=

           • += 操作是追加单个元素到序列中

           • ++= 操作是追加一个序列到序列中

   lib库依赖:

           非管理依赖方式:

                非管理依赖方式的工作原理就是将jar包放到lib目录下,sbt会自动的将其添加到classpath中, 但是如果想自定义一个依赖目录而不                   是默认的lib目录时,可以通过修改 unmanagedBase 参数配置, 比如用目录 custom_lib 替换 lib 目录

                   unmanagedBase := baseDirectory.value / "custom_lib"

            管理依赖方式:

                   libraryDependencies参数配置,以下是申明一个包依赖关系,

                    其中 groupId , artifactId 和 revision 是字符串类型

                   libraryDependencies += groupID % artifactID % revision

           远程依赖库地址管理

               添加远程库的方法如下:

               resolvers += name at location

               e.g:

                    resolvers+=Resolver.url("aliyun",url("http://maven.aliyun.com/nexus/content/groups/public/"))

你可能感兴趣的:(2018-05-31)