1. パッケージングの設定

パッケージングの設定 

クラスディレクトリの代わりにクラスパスでパッケージ化された jar を使用する 

デフォルトでは、プロジェクトはリソースとコンパイルされたクラスファイルを含むディレクトリをエクスポートします。パッケージ化された jar を代わりにエクスポートするには、`exportJars` を `true` に設定します。例えば、

exportJars := true

jar は、`run`、`test`、`console`、および完全なクラスパスを使用する他のタスクで使用されます。

マニフェスト属性を追加する 

デフォルトでは、sbt は `organization` や `mainClass` などの設定からバイナリパッケージのマニフェストを構築します。追加の属性は、設定とパッケージタスクによってスコープ指定された `packageOptions` 設定に追加できます。

メイン属性は `Package.ManifestAttributes` で追加できます。このメソッドには2つのバリアントがあります。1つは `java.util.jar.Attributes.Name` 型の属性を文字列値にマッピングする反復引数を受け入れるものと、属性名(文字列型)を文字列値にマッピングするものです。

例えば、

Compile / packageBin / packageOptions +=
  Package.ManifestAttributes(java.util.jar.Attributes.Name.SEALED -> "true")

他の属性は `Package.JarManifest` で追加できます。

Compile / packageBin / packageOptions +=  {
  import java.util.jar.{Attributes, Manifest}
  val manifest = new Manifest
  manifest.getAttributes("foo/bar/").put(Attributes.Name.SEALED, "false")
  Package.JarManifest( manifest )
}

または、ファイルからマニフェストを読み取るには

Compile / packageBin / packageOptions +=  {
  val file = new java.io.File("META-INF/MANIFEST.MF")
  val manifest = Using.fileInputStream(file)( in => new java.util.jar.Manifest(in) )
  Package.JarManifest( manifest )
}

パッケージのファイル名を変更する 

`artifactName` 設定は、生成されるパッケージの名前を制御します。詳細はアーティファクトページを参照してください。

パッケージの内容を変更する 

パッケージの内容は、`Seq[(File,String)]` 型の `mappings` タスクによって定義されます。`mappings` タスクは、パッケージに含めるファイルからパッケージ内のパスへのマッピングのシーケンスです。これらのマッピングを生成するための便利な関数は、ファイルのマッピングを参照してください。たとえば、ファイル `in/example.txt` をパス「out/example.txt」でメインのバイナリ jar に追加するには、

Compile / packageBin / mappings += {
  (baseDirectory.value / "in" / "example.txt") -> "out/example.txt"
}

`mappings` は設定と特定のパッケージタスクによってスコープ指定されることに注意してください。たとえば、テストソースパッケージのマッピングは、`Test / packageSrc / mappings` タスクによって定義されます。