Scala SBT Simple Build Tool

    科技2024-10-20  25

    如何学习scala?这是我总结的一些经验,在此记录以便复习。

    文章目录

    1,Scala官网2,SBT(simple build tool)1,CentOS 的SBT安装2,SBT试用- 进入sbt的shell- 输入exit退出sbt- 在sbt的shell里输入compile即可编译项目- sbt的热加载编译:- 创建资源文件- 键入回车,以退出热加载- 在sbt的shell窗口按上下键可以找到之前输入的命令- 在sbt的shell里输入help即可查看帮助- 输入`help 指令名`即可查看具体帮助,例如`help run`- 运行你刚才编译的项目- 设置项目的ThisBuild / scalaVersion- 保存当前会话的设置:- 给你的项目命名 3,StackOverflow

    1,Scala官网

    (1)官网 https://www.scala-lang.org/ 从官网上几乎可以了解到关于scala的大部分信息

    2,SBT(simple build tool)

    学习SBT是学习Scala必备技能,因为全世界90%以上的人使用SBT构建Scala项目= =,基础不牢,地动山摇,懂吧。

    https://www.scala-sbt.org/index.html 大部分人构建scala项目使用的工具

    SBT的操作手册,学习SBT就靠它 https://www.scala-sbt.org/1.x/docs/index.html

    SBT的API文档 https://www.scala-sbt.org/1.4.0/api/sbt/index.html

    1,CentOS 的SBT安装

    curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintray-sbt-rpm.repo sudo yum install sbt

    这里可能会无法下载,解决方法是在这个网站手动下载rpm包 https://sbt.bintray.com/rpm/ 然后上传到集群,再使用rpm -ivh命令安装

    2,SBT试用

    这里篇幅很长,而且是从官网翻译而来,并且运行测试后截图记录了。

    mkdir foo-build cd foo-build touch build.sbt

    - 进入sbt的shell

    在当前项目根目录下,输入sbt命令即可进入sbt的shell

    sbt

    第一次运行需要下载大量的依赖,可能会下载很久,建议开加速器下载,会更快。

    - 输入exit退出sbt

    - 在sbt的shell里输入compile即可编译项目

    - sbt的热加载编译:

    在complie前加~,每次你改动资源文件都会自动编译

    - 创建资源文件

    在刚才热加载的基础上,不要关闭那个有热加载的shell窗口,而是新打开一个shell窗口, 在项目目录下创建以下资源文件夹:

    src/main/scala/example

    再创建hello.scala文件,输入以下内容

    package example object Hello extends App { println("Hello") }

    然后在热加载的窗口可以看到以下内容:

    - 键入回车,以退出热加载

    - 在sbt的shell窗口按上下键可以找到之前输入的命令

    - 在sbt的shell里输入help即可查看帮助

    - 输入help 指令名即可查看具体帮助,例如help run

    - 运行你刚才编译的项目

    - 设置项目的ThisBuild / scalaVersion

    set ThisBuild / scalaVersion := “2.12.12” 查看设置的scalaVersion:

    - 保存当前会话的设置:

    session save

    然后build.sbt会包含你设置的scalaVersion

    - 给你的项目命名

    编辑build.sbt,输入以下内容,保存

    ThisBuild / scalaVersion := "2.12.12" ThisBuild / organization := "com.example" lazy val hello = (project in file(".")) .settings( name := "Hello" )

    重新加载你修改的build.sbt 在shell窗口里输入reload 要注意,命令最左边的行号变成了sbt:Hello,这说明reload生效了。

    添加ScalaTest到libraryDependencies里 修改build.sbt,修改完记得在shell里reload一下

    ThisBuild / scalaVersion := "2.12.12" ThisBuild / organization := "com.example" lazy val hello = (project in file(".")) .settings( name := "Hello", libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test, )

    reload之后你就可以在shell里运行test命令了,第一次运行test命令会下载一堆东西。

    还有一个命令是不间断的运行增量测试(就是热加载,一旦新写出了一个测试方法,就立刻执行)。

    ~testQuick

    要测试之前你得先写个测试方法。 创建一个文件:src/test/scala/HelloSpec.scala 输入以下内容:

    import org.scalatest._ class HelloSpec extends FunSuite with DiagrammedAssertions { test("Hello should start with H") { assert("hello".startsWith("H")) } }

    可以看到,因为hello的h不是大写的H所以返回了false,然后测试失败了,但是其实测试成功了,只不过返回的是失败信息。

    也就是测试不通过,但是测试本身是运行成功的。 那怎么让测试通过?只需要把hello的h改为H即可。 如下,修改后,测试通过

    添加依赖

    修改build.sbt为如下内容:

    ThisBuild / scalaVersion := "2.12.12" ThisBuild / organization := "com.example" lazy val hello = (project in file(".")) .settings( name := "Hello", libraryDependencies += "com.typesafe.play" %% "play-json" % "2.6.9", libraryDependencies += "com.eed3si9n" %% "gigahorse-okhttp" % "0.3.1", libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % Test, )

    修改完毕后reload一下即可

    使用Scala REPL

    我们可以查找到纽约最近的天气

    sbt:Hello> console [info] Starting scala interpreter... Welcome to Scala 2.12.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_171). Type in expressions for evaluation. Or try :help. scala> :paste // Entering paste mode (ctrl-D to finish) import scala.concurrent._, duration._ import gigahorse._, support.okhttp.Gigahorse import play.api.libs.json._ Gigahorse.withHttp(Gigahorse.config) { http => val baseUrl = "https://www.metaweather.com/api/location" val rLoc = Gigahorse.url(baseUrl + "/search/").get. addQueryString("query" -> "New York") val fLoc = http.run(rLoc, Gigahorse.asString) val loc = Await.result(fLoc, 10.seconds) val woeid = (Json.parse(loc) \ 0 \ "woeid").get val rWeather = Gigahorse.url(baseUrl + s"/$woeid/").get val fWeather = http.run(rWeather, Gigahorse.asString) val weather = Await.result(fWeather, 10.seconds) ({Json.parse(_: String)} andThen Json.prettyPrint)(weather) } // press Ctrl+D // Exiting paste mode, now interpreting. import scala.concurrent._ import duration._ import gigahorse._ import support.okhttp.Gigahorse import play.api.libs.json._ res0: String = { "consolidated_weather" : [ { "id" : 6446939314847744, "weather_state_name" : "Light Rain", "weather_state_abbr" : "lr", "wind_direction_compass" : "WNW", "created" : "2019-02-21T04:39:47.747805Z", "applicable_date" : "2019-02-21", "min_temp" : 0.48000000000000004, "max_temp" : 7.84, "the_temp" : 2.1700000000000004, "wind_speed" : 5.996333145703094, "wind_direction" : 293.12257757287307, "air_pressure" : 1033.115, "humidity" : 77, "visibility" : 14.890539250775472, "predictability" : 75 }, { "id" : 5806299509948416, "weather_state_name" : "Heavy Cloud", ... scala> :q // to quit

    运行console时需要下载

    3,StackOverflow

    https://stackoverflow.com/

    在学习过程中遇到的问题,可以在这里提问,查找相关答案,解决方法等等。 百度,谷歌也能找到答案,但是StackOverflow可是全球最大的bug解决基地,精英都在这儿了。

    本文持续更新中…

    Processed: 0.014, SQL: 8