■ はじめに
Scala を初めて、SBTについて今まで何となくやっていたが ちゃんと勉強しないとまずいと感じたので、メモ。
目次
【0】環境設定 【1】ビルドツール「sbt」 1)主な機能 2)sbt の処理の流れ 【2】フォルダ構成 1)build.sbt 2)build.properties 3)plugins.sbt 【3】定義ファイル種類 1)マルチプロジェクト .sbtビルド定義ファイル 2)bare .sbtビルド定義ファイル 【4】タスク 1)タスク追加
【0】環境設定
* 以下の関連記事を参照のこと
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
【1】ビルドツール「sbt」
* Scala の ビルドツール => Simple Build Tool (Scala Build Toolじゃなかった) => JavaのMaven、Ant、Gradleに相当するツール
1)主な機能
[1] ビルド [2] プロジェクト作成 [3] 依存関係解決
2)sbt の処理の流れ
[1] sbt自身とその依存ライブラリをダウンロードし、ロードする [2] project配下の設定ファイルで指定されたsbtプラグインがあれば ダウンロードしてロードする [3] ビルド設定ファイルをScalaコードとしてコンパイル [4] 必要なライブラリ類をダウンロードしてScalaのコンパイルを実行 [5] 依存ライブラリをダウンロードしてScalaのコンパイル時に クラスパスに追加できる状態にする
【2】フォルダ構成
├─build.sbt ... ビルド定義ファイル ├─project │ ├─build.properties ... sbtバージョン設定 │ └─plugins.sbt ... sbtプラグインの設定 └─src ├─main ... メインコード └─test ... テストコード
1)build.sbt
* ビルド定義ファイル => 「プロジェクト」を定義するもの
2)build.properties
* sbtバージョン設定
サンプル
https://github.com/jhole89/aws-glue-sbt-quickstart/blob/master/project/build.properties
sbt.version = 1.2.8
3)plugins.sbt
* sbtプラグインの設定
サンプル
https://github.com/jhole89/aws-glue-sbt-quickstart/blob/master/project/plugins.sbt
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.2.1") addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")
【3】定義ファイル種類
* 以下の2通りある。 1)マルチプロジェクト .sbtビルド定義ファイル 2)bare .sbtビルド定義ファイル
1)マルチプロジェクト .sbtビルド定義ファイル
* 通常は、1)で書く => とはいえ、2) の書き方もネットでは多い、、、
https://www.scala-sbt.org/1.x/docs/ja/Multi-Project.html
// [変数] = ( Project ).settings( ... 設定内容 ... ) lazy val root = (project in file(".")). settings( name := "project-name", version := "1.0", scalaVersion := "2.12.8", libraryDependencies ++= dervy, testTasks in Test := {}, assemblySettings, test in assembly := {} )
2)bare .sbtビルド定義ファイル
* 単一プロジェクトのビルドしか行うことができない
https://www.scala-sbt.org/1.x/docs/ja/Bare-Def.html
【4】タスク
* SBTで呼び出し、実行できる処理の単位。 => 「sbt run」「sbt compile」の場合、 タスクはそれぞれ「run」「compile」になる
https://www.scala-sbt.org/1.x/docs/Tasks.html
1)タスク追加
// ★ここに注目★ 「タスクキー」(他には「セッティングキー」「インプットキー」がある) val sampleTask = taskKey[Unit]("sample task...") lazy val root = (project in file(".")). settings( name := "project-name", version := "1.0", // ★ここに注目★ sampleTask := { println() println("*********************") println(s"Hello, world!! ${name.value} - ${version.value}") println("*********************") println() } )
コマンド例および出力例
$ sbt sampleTask ・・・略・・・ [info] set current project to project-name (in build file:/C:/work/scala/codes/HelloWorld/sample/) ********************* Hello, world!! project-name - 1.0 ********************* [success] Total time: 0 s, completed 2023/05/16 23:08:15
関連記事
SBT ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/13/002637
SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000
SBT ~ 基本編 / sbtコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/26/000000
SBT ~ sbtプラグイン ~
https://dk521123.hatenablog.com/entry/2023/01/25/000000
SBT ~ JAR作成/実行 ~
https://dk521123.hatenablog.com/entry/2023/10/12/200450
SBT ~ 引数設定の仕方 ~
https://dk521123.hatenablog.com/entry/2023/08/21/000000
SBT ~ 設定の切替 ~
https://dk521123.hatenablog.com/entry/2023/08/28/165323
SBT ~ リポジトリ先を変更・追加するには ~
https://dk521123.hatenablog.com/entry/2024/01/12/191252
SBT ~ Proxy環境下でSBTを使用する ~
https://dk521123.hatenablog.com/entry/2023/11/23/000000
SBTでのエラー/警告対応
https://dk521123.hatenablog.com/entry/2023/04/06/093458
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000
Scala ~ 基本編 / メソッド ~
https://dk521123.hatenablog.com/entry/2023/03/03/000000
Scala ~ 基本編 / クラス ~
https://dk521123.hatenablog.com/entry/2023/03/14/000857
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ 基本編 / 日付・日時 ~
https://dk521123.hatenablog.com/entry/2023/03/08/000000
Scala ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2023/03/18/034704
Scala ~ 基本編 / ジェネリック
https://dk521123.hatenablog.com/entry/2023/03/21/003817
Scala ~ ファイル名・パスの扱い ~
https://dk521123.hatenablog.com/entry/2023/03/11/000000
Scala ~ YAML ~
https://dk521123.hatenablog.com/entry/2023/03/16/012034
ScalaTest ~ with Coverage ~
https://dk521123.hatenablog.com/entry/2023/08/07/222945
SDKMAN ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/08/13/000000
Spark/Scalaの開発環境構築 ~ Windows編 ~
https://dk521123.hatenablog.com/entry/2023/03/20/115450
AWS CodeArtifact ~ SBTでCodeArtifactを使う ~
https://dk521123.hatenablog.com/entry/2024/01/20/000329
Github Actions ~ Scala Linter ~
https://dk521123.hatenablog.com/entry/2024/04/02/002828