sbt-assemblyで指定したサブプロジェクトのみjarファイルを作る方法

情弱だったのでメモ。

こんな感じのマルチプロジェクトの設定がbuild.sbtにあるとします。

import sbt.Keys.{libraryDependencies, organization, resolvers}
import sbt._
import sbtassembly.AssemblyPlugin.autoImport.assemblyMergeStrategy

lazy val commonSettings = Seq(
  scalaVersion := "2.11.12",
  resolvers ++= Seq(
    "mvn" at "https://mvnrepository.com/artifact"
  ),

  libraryDependencies ++= Seq(
    "mysql" % "mysql-connector-java" % "5.1.46"
  ),

  assemblyJarName := {
    s"${name.value}-${version.value}.jar"
  },
)

lazy val common = (project in file("common"))
  .settings(commonSettings: _*)

lazy val subProject = (project in file("subProject"))
  .settings(
    commonSettings,
  )
  .settings(
    name := "subproject",
    version := "0.1",
    mainClass in assembly := Some("com.romiogaku.SubProject")
  )
  .dependsOn(common)

通常

$ sbt assembly

でFatJarを生成すると思います。実行すると全てのプロジェクトのjarファイルができあがります。

以下のようにすると、指定したプロジェクトのjarファイルのみを生成します。

$ sbt subProject/assembly

subProjectbuild.sbtlazy valで定義した変数名。