zoukankan      html  css  js  c++  java
  • Scala之SBT

    关于

    SBT是 Scala 的构建工具,全称是 Simple Build Tool, 类似 Maven 或 Gradle。 SBT 的野心很大,采用Scala编程语言本身编写配置文件,这使得它稍显另类,虽然增强了灵活性,但是对于初学者来说同时也增加了上手难度。

    SBT有很多版本从1.0.0进行了Scala版本及JDK的版本升级,以及一些调整

    • sbt 1.0 uses Scala 2.12 for build definitions and plugins. This also requires JDK 8.

    常用命令

    sbt assembly  #打 fat jar包

    配置

    系统配置目录: ~/.sbt/repositories     如果要更改这个目录,参考: 链接

    工程配置文件:

    project/project/
    project/target/
    target/ 

    .sbt 构建定义

    build.sbt 定义了一个 Project,它持有一个名为settings的scala表达式列表。

    下面是一个例子:

    ThisBuild / organization := "com.example"
    ThisBuild / scalaVersion := "2.12.13"
    ThisBuild / version      := "0.1.0-SNAPSHOT"
    
    lazy val root = (project in file("."))
      .settings(
        name := "hello"
      )
    

    每一项 Setting 都定义为一个 Scala 表达式。在 settings 中的表达式是相互独立的,而且它们仅仅是表达式,不是完整的 Scala 语句。

    这些表达式可以用 vallazy valdef 声明。 build.sbt 不允许使用顶层的 object 和 class。它们必须写到 project/ 目录下作为完整的 Scala 源文件。

    在左边,name, version 和 scalaVersion 都是 键(keys)。一个键(key)就是一个 SettingKey[T]TaskKey[T] 或者 InputKey[T] 的实例,T 是期望的 value 的类型。 key 的类别将在下面讲解。

    键(Keys)有一个返回 Setting[T] 的 := 方法。你可以像使用 Java 的语法一样调用该方法:

    lazy val root = (project in file("."))
      .settings(
        name.:=("hello")
      )

    但是,Scala 允许 name := "hello" 这样调用(在 Scala 中,一个只有单个参数的方法可以使用任何一种语法调用)。

    键(key)name 上的 := 方法会返回一个 Setting,在这里特指 Setting[String]String 也出现在 name 自身的类型 SettingKey[String] 中。 在这个例子中,返回的 Setting[String] 是一个在 sbt 的 map 中增加或者替换键为 name 的转换,赋值为 "hello"

    如果你使用了错误类型的 value,构建定义会编译不通过:

    lazy val root = (project in file("."))
      .settings(
        name := 42  // 编译不通过
      )

    默认值

    sbt默认Scala源码路径:src/main/scala  测试源码路径:src/test/scala, 如果要修改,设置scalaSource,举例:

    Compile / scalaSource := baseDirectory.value / "src"
    
    Test / scalaSource := baseDirectory.value / "test-src"

    默认Java源码路径:src/main/java  测试源码路径:src/test/java, 如果要修改,设置javaSource,举例: 

    Compile / javaSource := baseDirectory.value / "src"
    
    Test / javaSource := baseDirectory.value / "test-src"

    注:scala源码可以和和java源码在相同的目录

    项目样例

    import sbtprotobuf.{ProtobufPlugin=>PB}
    
    PB.protobufSettings
    version in PB.protobufConfig := "3.2.0"
    
    unmanagedResourceDirectories in Compile <+= (sourceDirectory in PB.protobufConfig)
    javaSource in PB.protobufConfig <<= (sourceDirectory in Compile)(_ / "generated")
    compileOrder := CompileOrder.JavaThenScala
    
    lazy val commonSettings = Seq(
      organization := "com.my.test",
      version := "0.1.0",
      scalaVersion := "2.11.8"
    )
    
    lazy val root = (project in file(".")).
      settings(commonSettings: _*).
      settings(
        PB.protobufSettings : _*).
      settings(
        name := "anti-batch",
    
        libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0" % "provided",
        libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.1.0" % "provided",
        libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.1.0" % "provided",
        libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.1.0" % "provided",
        libraryDependencies += "org.json4s" %% "json4s-native" % "3.3.0",
        libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test",
        libraryDependencies += "com.google.protobuf" % "protobuf-java" % (version in PB.protobufConfig).value % PB.protobufConfig.name,
        libraryDependencies += "org.scalanlp" %% "breeze" % "0.13.2",
        libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.40",
        libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.2",
        libraryDependencies += "com.hadoop.compression" % "hadoop-gpl-compression" % "0.1.0",
        libraryDependencies += "org.json4s" %% "json4s-jackson" % "3.4.1" ,
        libraryDependencies += "org.json4s" %% "json4s-native" % "3.3.0" ,
        libraryDependencies += "org.yaml" % "snakeyaml" % "1.19-SNAPSHOT" ,
        libraryDependencies += "commons-cli" % "commons-cli" % "1.4",
        test in assembly := {}
      )
    
    parallelExecution in Test := false

    资料

    https://www.scala-sbt.org/index.html

    https://github.com/sbt/sbt

    https://github.com/sbt/sbt/releases?after=v1.0.0

    https://www.scala-sbt.org/1.x/docs/zh-cn/Basic-Def.html

    https://www.scala-sbt.org/0.13/docs/Launcher-Configuration.html

  • 相关阅读:
    Android模拟器安装程序及上传音乐并播放
    Android .classpath文件的作用
    eclipse常用快捷键
    使用Eclipse开发Android源码
    android模拟器环境选择媒体文件,解决"No media found"
    Android模拟器使用SD卡
    string.xml文件需要转译字符”’”
    播放器设计方案
    PHP文件系统文件上传
    PHP文件系统文件下载
  • 原文地址:https://www.cnblogs.com/cfox/p/14417765.html
Copyright © 2011-2022 走看看