sbt入门

12 篇文章 0 订阅

sbt 介绍

sbt是什么?

sbt到底是什么,在网上找找,似乎找不到一个非常准确,而且大家都认可的定义。

我自己对sbt的理解没有那么复杂,主要是以下这些。

sbt翻译为simple build tool,这是一种较为直观的,而且比较符合sbt官网的一些信息:

image-20220210215613624

在官网的首页上第一条就说明sbt是一个简单的构建工具,所以翻译为simple build tool似乎也没有什么不妥。

不过就像网上有人评论,一般名字是简单的什么什么,最后做出来的都不简单。

sbt另一种翻译是scala build tool

在maven占据了java大部分的份额下,scala项目使用sbt作为构建工具的比例似乎比java要高点,而且,在sbt的官网首页上就说了,定义我们的scala任务,并行处理等等,所以翻译为scala build tool似乎也没错。

总的来说,sbt怎么理解,都不会影响到我们对sbt的使用,你有自己的理解更好,看看我的理解也是一种。

sbt 下载

sbt的下载在官网上非常容易找到,甚至很显眼sbt - Download (scala-sbt.org)

image-20220210220318577

最显眼的两个按钮,一个是下载,一个是文档,顺便提前说一下,sbt的文档是支持中文的,对我们学习sbt有很大的遍历性。也许,这可能是网上关于sbt的文章和资料较少的一个原因吧。

顺便夸赞一句,sbt的下载界面的布局,比起java来说,实在是好太多了,页面往下拉,就是最新版本,再往下拉,就是全部版本的下载,而且不用切换界面,就可以下载各种各样的包(zip,tgz,msi)

image-20220210220609973

我下载的是1.6.1版本。

sbt 安装

我们在sbt的官网上打开sbt的文档sbt Reference Manual — sbt Reference Manual (scala-sbt.org)这是中文的文档,有些概念性的东西,英文可能更加准确,你可以随时切换。

我下载的是zip包,所以和java类似,将zip包下载后解压,然后配置环境变量即可。

image-20220210220851061

我个人比较喜欢和java一样,配置SBT_HOME然后把SBT_HOME配置到环境变量Path

image-20220210220952099

image-20220210221009243

如何验证呢?

我们打开cmd,然后执行sbt version

image-20220210221101156

需要注意的是,sbt必须要有java环境,而且在sbt的输出信息中,第一行中就会打印我们现在使用的sbt的版本和java的版本。

sbt 入门 – helloworld

安装好sbt后,文档中就给我们写了一个简单的helloworld的小例子。

image-20220210221247352

我们在文件夹下创建hello的文件夹

image-20220210221401718

然后我们创建一个hello.scala文件,文件名字无所谓

image-20220210221442083

然后使用在hello.scala中写入文档中给出的代码

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

然后我们在hello文件夹下打开cmd,我们直接在地址栏输入cmd回车,就会在这个路径下打开cmd。或者说会打开cmd然后切换到这个路径下

image-20220210221552069

就像这样

image-20220210221640928

然后我们输入sbt,启动sbt,让sbt自动初始化项目,sbt会提示我们文件夹没有找到build.sbt文件,是否进行初始化,就像git一样,会生成自己的文件,我们选择c

image-20220210221831391

接着就会进行初始化操作等等

image-20220210221909585

在文件夹下会生成一些目录

image-20220210221934752

其中.bsp是sbt的启动配置文件夹,里面只有一个sbt.json文件

内容如下

{"name":"sbt","version":"1.6.1","bspVersion":"2.0.0-M5","languages":["scala"],"argv":["E:\\java\\jdk\\jdk11/bin/java","-Xms100m","-Xmx100m","-classpath","E:\\sbt\\bin\\sbt-launch.jar","xsbt.boot.Boot","-bsp","--sbt-launch-jar=E:\\sbt\\bin\\sbt-launch.jar"]}

接着我们在cmd中的sbt shell 中输入compile进行编译

image-20220210222144234

接着输入run执行scala文件

image-20220210222207654

成功的执行了scala文件中的main方法。

而且sbt支持批量执行命令,但是不能在sbt shell中执行,在sbt shell中只能一个一个的命令执行。

我们先使用ctrl + D 退出sbt shell,然后在cmd中执行sbt clean compile run命令

image-20220210222429169

在我们执行过一个sbt的命令后,sbt会在./project目录下生成一个build.properties文件

image-20220210222518643

内容就是指定了sbt的版本

image-20220210222537537

在maven中,我们的项目的一些配置都会放在pom.xml文件中,而sbt和maven非常类似,也是在项目根目录下的build.sbt文件中

所以我们在hello目录下创建build.sbt文件

我的scala版本是2.12.15版本

image-20220210222814208

我们在build.sbt中定义项目

lazy val root = (project in file("."))
  .settings(
    name := "hello",
    version := "1.0",
    scalaVersion := "2.12.15"
  )

这里说一下,.sbt后缀的文件,使用的是兼容.scala的特殊语法。

然后我们进入sbt shell

image-20220210223049613

然后我们使用sbt的命令show name查看项目的名字

image-20220210223202795

除此之外,还记得project/build.properties文件吗,这里也可以配置项目的信息,但是需要注意build.sbtbuild.properties文件如果配置了不同的版本,那么哪个优先级更高呢?

image-20220210223347669

发现build.sbt的优先级高于build.properties的配置

image-20220210223449459

image-20220210223508500

除此之外,在sbt shell中也可以配置项目的信息set name:="hisbtshell"

image-20220210223612379

发现sbt shell 的优先级又高于build.sbt的配置

sbt 目录结构

我们熟悉的maven项目中,源码文件和配置文件,都在约定俗成的目录结构

src/
  main/
    resources/
       <files to include in main jar here>
    java/
       <main Java sources>
  test/
    resources
       <files to include in test jar here>
    java/
       <test Java sources>

sbt和maven类似,在maven的基础上增加了scala的目录

src/
  main/
    resources/
       <files to include in main jar here>
    scala/
       <main Scala sources>
    scala-2.12/
       <main Scala 2.12 specific sources>
    java/
       <main Java sources>
  test/
    resources
       <files to include in test jar here>
    scala/
       <test Scala sources>
    scala-2.12/
       <test Scala 2.12 specific sources>
    java/
       <test Java sources>

需要注意因为scala版本的问题,会在各个版本的目录下实现特定版本的兼容的代码。

project目录中,不仅仅可以有build.properties配置文件,还可以写一些scala文件,用于我们项目的处理。

我们在git的.gitignore文件中应该把编译的输出文件夹target排除,使用target/来排除,不仅仅是主项目的target,子项目的target也应该排除。

sbt 命令

在helloworld例子中我们已经接触了一些sbt的命令,比如reload,clean,compile,run等。当然还有批量执行sbt命令。

实际上sbt的命令比想象中的更加强大,sbt支持监控文件是否变化,当文件被修改后,自动执行指定的命令

这需要在sbt shell中实现,方式就是在相关的单个命令前加上~符号即可。

sbt常用命令

clean删除编译生成的文件(在target目录下)
compile编译文件(src/main/java和src/main/scala等)
test编译和执行test
console进入一个包含了依赖的scala shell中
run执行main方法
package打包生成jar
help显示帮助信息
reload重新加载项目

sbt支持和linux中使用tab自动补全命令。

sbt也支持历史命令,即使我们退出sbt shell,然后重新进入,这些历史命令也不会清除

!显示历史记录命令帮助。
!!重新执行前一条命令。
!:显示所有之前的命令。
!:n显示之前的最后 n 条命令。
!n执行 !: 命令显示的结果中下标为 n 的命令。
!-n执行从该命令往前数第 n 条命令。
!string执行最近执行过的以 string 打头的命令。
!?string执行最近执行过的包含 string 的命令。

历史命令存储在target目录下的.histroy3文件内

image-20220210225058413

如果你确实想清除历史命令记录,将这个文件清空即可

image-20220210225144080

如下

image-20220210225205278

总结

总的来说,sbt的文档还是挺友好的。一定记住,一般情况下,最准确的资料就是官方文档,遇到问题一般在官方文档中都能找到解决方案,即使找不到解决方案,官方文档也会给出联系方式,用于我们直接与开发者沟通。

sbt的简单使用并不是很难,只要稍微看下官方文档,就能入门。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值