【Scala】SBT ~ 基本編 / build.sbt ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/03/22/000000

の続き。
build.sbt の書き方について、メモ。

目次

【1】libraryDependencies
 1)% "test"
 2)% "provided"
 3)% "compile"
 4)%%
【2】excludeDependencies
【3】resolvers
 補足:ivyとは?
【4】addCommandAlias
 1)構文
 2)使用例
【5】scalacOptions
 1)-deprecation
 2)-feature
 3)-language.implicitConversions
 4)-Ywarn-unused:imports
 5)-Ywarn-value-discard

【1】libraryDependencies

* 依存関係を追加

// 単一ライブラリを追加する
libraryDependencies ++= 依存性ライブラリ情報

// 複数ライブラリを纏めて追加する
libraryDependencies ++= Seq(
  依存性ライブラリ情報1,
  依存性ライブラリ情報2,
  ...
)

libraryDependencies ++= Seq(
  // "グループID" % "アーティファクトID" % "バージョン" % "コンフィグレーション"
  "com.amazonaws" % "AWSGlueETL" % "4.0.0" % "provided",
  "software.amazon.awssdk" % "s3" % "2.20.30",
  "software.amazon.awssdk" % "kms" % "2.20.30",
  "software.amazon.awssdk" % "ses" % "2.20.30",
  "org.scalatest" %% "scalatest" % "3.0.8" % "test"
)

1)% "test"

* テスト時のみ依存を追加

2)% "provided"

* 本番環境ではライブラリがインストールされているので不要だが、
 ローカル環境でのみ適用したい依存ライブラリの場合に付与

3)% "compile"

* コンパイルしてJARファイルに含める
* デフォルトなので省略可能だが、以下の関連記事のように
 ビルドを切り替える時に便利

SBT ~ 設定の切替 ~
https://dk521123.hatenablog.com/entry/2023/08/28/165323

4)%%

* Scala バージョン
* 例えば、scala-stm_2.12 (2.12:Scalaバージョン) を指定した場合
 2.12の部分を「%%」と書くことができる

libraryDependencies += "org.scala-stm" % "scala-stm_2.12" % "0.9.1"
libraryDependencies += "org.scala-stm" %% "scala-stm" % "0.9.1"

【2】excludeDependencies

* 不要な依存を除外

excludeDependencies ++= Seq(
  ExclusionRule("javax.ws.rs", "javax.ws.rs-api"),
)

【3】resolvers

https://www.scala-sbt.org/1.x/docs/ja/Library-Dependencies.html#Resolvers

より抜粋
~~~~~~~~~~~~~~~~
Resolvers 
全てのパッケージが一つのサーバに置いてあるとは限らない。
 sbt は、デフォルトで Maven の標準リポジトリ(訳注:Maven Central Repository)を使う。
もし依存ライブラリがデフォルトのリポジトリに存在しないなら、
Ivy がそれを見つけられるよう resolver を追加する必要がある。
~~~~~~~~~~~~~~~~

resolvers ++= Seq(
  "aws-glue-etl-artifacts" at "https://aws-glue-etl-artifacts.s3.amazonaws.com/release/"
)

補足:ivyとは?

* 依存管理のライブラリ

https://blog.shibayu36.org/entry/2018/03/28/193000

【4】addCommandAlias

* addCommandAliasにより、
 sbtコマンドを組み合わせて、エイリアスを定義できる
 => sbtコマンドについては、以下の関連記事を参照のこと

SBT ~ 基本編 / sbtコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/26/000000

1)構文

addCommandAlias(
  "【エイリアス】", // Clean-Compile
  ";【SBTコマンド1】 ;【SBTコマンド2】 ;..."
)

2)使用例

addCommandAlias(
  "cc", // Clean-Compile
  ";clean ;compile"
)

コマンド

# これにより、「sbt clean」-> 「sbt compile」が実行されることになる
sbt cc

【5】scalacOptions

* Scalaコンパイラ「scalac」のオプション設定

https://docs.scala-lang.org/overviews/compiler-options/index.html

* 以下のサイトも参照しておいた方がよさそう

https://qiita.com/kawachi/items/1c1d063de91c5445e8bc?_fsi=gjrUYGwN
https://eed3si9n.com/ja/stricter-scala-with-xlint-xfatal-warnings-and-scalafix/

1)-deprecation

* 非推奨APIの警告を詳細に教えてくれる

2)-feature

* 暗黙的にScala機能を使っていた場合に警告して詳細に教えてくれる

3)-language.implicitConversions

* 暗黙の型変換を定義する際に「import scala.language.implicitConversions」
 しないと警告が出るが、これを指定すると警告が表示されなくなる

4)-Ywarn-unused:imports

* 使っていない import文 があった場合、警告

5)-Ywarn-value-discard

* Unit型なのに、値を変換しているようなコードがあった場合、警告

def add(x1: Int, x2: Int): Unit = x1 + x2

関連記事

SBT ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/22/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/28/165323
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