750 字
4 分钟
使用 sbt 配置管理与运行
关于安装,参考上一篇文章
启动 shell
首先创建项目目录,并创建一个 sbt 文件
mkdir hellocd hellotouch hello.sbt启动 sbt shell,在 shell 中可以使用 help 查看命令帮助
$ sbt[info] Updated file /root/hello/project/build.properties: set sbt.version to 1.2.8[info] Loading project definition from /root/hello/project[info] Updating ProjectRef(uri("file:/root/hello/project/"), "hello-build")...[info] Done updating.[info] Loading settings for project hello from build.sbt ...[info] Set current project to hello (in build file:/root/hello/)[info] sbt server started at local:///root/.sbt/1.0/server/531858fa6de1db1d6da4/socksbt:hello>sbt:hello> help
about Displays basic information about sbt and the build. tasks Lists the tasks defined for the current project. settings Lists the settings defined for the current project. reload (Re)loads the current project or changes to plugins project or returns from it. new Creates a new sbt build. projects Lists the names of available projects or temporarily adds/removes extra builds to the session....在 shell 中使用 exit 命令或者 Ctrl+D 退出
sbt:hello> exit[info] shutting down server退出 shell 后,文件目录已发生了改变,我们使用 tree 查看一下文件目录,这里的 -L 5 代表打印目录层级深度为5。
如果你没有安装 tree,可以使用 ls -lahR,不过可读性和美观度就差了很多了。
$ tree -L 5.├── build.sbt├── project│ ├── build.properties│ └── target│ ├── config-classes│ ├── scala-2.12│ │ └── sbt-1.0│ │ └── resolution-cache│ └── streams│ ├── $global│ │ ├── $global│ │ ├── dependencyPositions│ │ ├── ivyConfiguration│ │ ├── ivySbt│ │ ├── projectDescriptors│ │ └── update│ ├── compile│ │ ├── $global│ │ ├── compile│ │ ├── compileIncSetup│ │ ├── compileIncremental│ │ ├── copyResources│ │ ├── dependencyClasspath│ │ ├── exportedProducts│ │ ├── externalDependencyClasspath│ │ ├── internalDependencyClasspath│ │ ├── managedClasspath│ │ ├── unmanagedClasspath│ │ └── unmanagedJars│ └── runtime│ ├── dependencyClasspath│ ├── exportedProducts│ ├── externalDependencyClasspath│ ├── fullClasspath│ ├── internalDependencyClasspath│ ├── managedClasspath│ ├── unmanagedClasspath│ └── unmanagedJars└── target
37 directories, 2 fileshello, world
退出 shell 后,创建目录 src/main/scala/example,并创建文件 Hello.scala。
mkdir -p src/main/scala/example/vim src/main/scala/example/Hello.scalaHello.scala 文件中的程序是打印一个 hello, world
object Hello extends App { println("hello, world")}再次进入 shell 中
- 使用
compile命令编译程序 - 使用
run命令运行程序
程序运行成功,打印出 hello, world
sbt:hello> compile[info] Compiling 1 Scala source to /root/hello/target/scala-2.12/classes ...[info] Done compiling.[success] Total time: 5 s, completed 2019-4-17 20:29:17sbt:hello> run[info] Packaging /root/hello/target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT.jar ...[info] Done packaging.[info] Running example.Hellohello, world[success] Total time: 1 s, completed 2019-4-17 20:29:36项目构建配置
编写项目配置文件 build.sbt,指定 scala 版本号以及项目命名
name := "Hello"修改 build.sbt 后,使用 reload 重新载入配置。此时提示符变为了项目名
sbt:hello> reload[info] Loading project definition from /root/hello/project[info] Loading settings for project hello from build.sbt ...[info] Set current project to Hello (in build file:/root/hello/)sbt:Hello>打包
$ sbt package[info] Loading project definition from /root/hello/project[info] Loading settings for project hello from build.sbt ...[info] Set current project to Hello (in build file:/root/hello/)[success] Total time: 1 s, completed 2019-4-18 12:04:29打包成 jar 后,可以在以下路径找到目标 jar 包的位置 ./target/scala-2.12/
$ find . | grep jar./target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT-sources.jar./target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT-javadoc.jar./target/scala-2.12/hello_2.12-0.1.0-SNAPSHOT.jar第三方库依赖管理
对于你需要的第三方库可以到 https://maven.apache.org/ 进行查找
如果选择 sbt 作为依赖管理工具,如果需要引入第三方库,编辑 build.sbt,按以下格式添加依赖
libraryDependencies += groupID % artifactID % revision如需要添加 spark-streaming 的库
// https://mvnrepository.com/artifact/org.apache.spark/spark-streaminglibraryDependencies += "org.apache.spark" %% "spark-streaming" % "2.4.1" % "provided" 使用 sbt 配置管理与运行
https://blog.zhequtao.com/posts/post/sbt-get-started/