【Scala】SBT ~ 設定の切替 ~

■ はじめに

sbt で 開発用(Local)と本番用(AWS)で切り替えたい場合に
色々と調べていたんだけど、やっとそれっぽい切り替えが可能になったので
メモしておく。

なお、参考にしたのは、以下のサイトを組み合わせている

https://stackoverflow.com/questions/30337672/conditional-libraries-in-build-sbt
https://discuss.lightbend.com/t/conditional-sbt-dependencies/391/2

目次

【1】設定の切替
 1)サンプル
 2)別解
【2】補足:依存性ライブラリ の切替

【1】設定の切替

1)サンプル

val projectName = "my.proj"
val organization = "my.org"
scalaVersion := "2.12.15"

val echoTask = taskKey[Unit]("For logging...")
val isAws = System.getProperty("isAws", "false")

val awsDependencies: Seq[sbt.ModuleID] =
  if (isAws.equals("true"))
    Seq(
      "software.amazon.awssdk" % "s3" % "2.20.30",
      "software.amazon.awssdk" % "kms" % "2.20.30",
      "software.amazon.awssdk" % "ses" % "2.20.30"
    )
  else
    Seq.empty

lazy val root = (project in file(".")).
  settings(
    name := "project-name",
    version := "1.0",
    libraryDependencies ++= Seq (
      "org.scalatest" %% "scalatest" % "3.0.8" % "test"
    ) ++ awsDependencies,
    echoTask := {
      println()
      println("*********************")
      if (isAws.equals("true"))
        println(s"For AWS")
      else
        println(s"For Local")
      println("*********************")
      println()
    }
  )

コマンド例

$ sbt "-DisAws=true compile echoTask" 

*********************
For AWS
*********************

2)別解

val isAws = System.getProperty("isAws", "false").contains("true")
val scope = if (isAws) Provided else Compile

// 略

    libraryDependencies ++= Seq (
      "org.scalatest" %% "scalatest" % "3.0.8" % "test"
      "software.amazon.awssdk" % "s3" % "2.20.30" % scope,
      "software.amazon.awssdk" % "kms" % "2.20.30" % scope,
      "software.amazon.awssdk" % "ses" % "2.20.30 % scope"

// 略

【2】補足:依存性ライブラリ の切替

* 依存性ライブラリ であれば、以下がある
 + 1)% "test"
 + 2)% "provided"
 + 3)% "compile"

 => 詳細は、以下の関連記事を参照のこと

SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000

libraryDependencies ++= Seq(
  "software.amazon.awssdk" % "ses" % "2.20.30",
  "com.amazonaws" % "AWSGlueETL" % "4.0.0" % "provided",
  "org.scalatest" %% "scalatest" % "3.0.8" % "test"
)

関連記事

Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
SBT ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/22/000000
SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000
SBT ~ 引数設定の仕方 ~
https://dk521123.hatenablog.com/entry/2023/08/21/000000
Apache Flink ~ 引数の扱い / ParameterTool ~
https://dk521123.hatenablog.com/entry/2023/08/01/004207