sbt assemlby実行時にリソースフォルダを変更できるようにしたい
まずデフォルトのリソースフォルダを変更してみる
sbt assemblyで実行可能jarを作成する際通常は"src/main/resources"がリソースフォルダとして使われますが、build.sbtにresourceDirectory in Compile
の設定をすることによりデフォルトのリソースフォルダを変更することができます。以下では標準のリソースフォルダがsrc/main/resources/developmentになるように変更しています。
lazy val app = (project in file(".")). settings(assemblySettings: _*). settings(resourceDirectory in Compile := baseDirectory.value / "src" / "main" / "resources" / "development")
sbt assembly実行時に動的にリソースフォルダを変更してみる
例えば以下のようなフォルダの構成でリソースフォルダをビルド時に変更したい場合
src/main/resources ├── development: 開発時に使用するリソース ├── production: 本番環境リリース時のリソース └── staging: ステージ環境リリース時のリソース
この場合、最初はresourceDirectoryを変更するタスクを作ってassemblyと連続して呼び出せば大丈夫なのかと思ったのですがタスク間ではresourceDirectoryの変更などの副作用が起きないような動きをしていて困ったのですが、sbtにはaddCommandAliasというものがあり事前にset resourceDirectory in Compile
すれば大丈夫そうでした。結果ですが以下のbuild.sbtの設定ではsbt assembly
ではデフォルトのリソースフォルダをsbt prodEnvAssembly
ではproduction環境のリソースフォルダをsbt stgEnvAssemlby
ではstaging環境のリソースフォルダを使うようになります。
lazy val app = (project in file(".")). settings(resourceDirectory in Compile := baseDirectory.value / "src" / "main" / "resources" / "development") addCommandAlias("prodEnvAssembly", ";set resourceDirectory in Compile := baseDirectory.value / \"src\" / \"main\" / \"resources\" / \"production\"; assembly") addCommandAlias("stgEnvAssembly", ";set resourceDirectory in Compile := baseDirectory.value / \"src\" / \"main\" / \"resources\" / \"staging\"; assembly")