Deletions are marked like this. | Additions are marked like this. |
Line 52: | Line 52: |
> a | |
Line 58: | Line 57: |
とすれば「target/scala_2.9.1/プロジェクト名-assembly-バージョン.jar」というファイルが作成される。最低でも20Mバイトのファイルになるので非常に時間がかかる。 |
とすれば「target/scala_2.9.1/プロジェクト名-assembly-バージョン.jar」というファイルが作成される。 最低でも20Mバイトのファイルになるので非常に時間がかかる。 |
sbt-assembly
https://github.com/eed3si9n/sbt-assembly
概要
アプリのclassファイルとそれが依存するライブラリのclassファイルを一つの大きなjarファイルにする。 そのため、この単一のjarファイルを配布するだけでよく、実行時に依存jarをダウンロードする必要も、クラスパスを設定する必要も無い。
ただし、必要なものをすべて入れ込んでしまうため、HelloWorldでも20Mバイト程度のjarになる。 MainClassは自動検出されるが、明示的に指定することもできる。
使い方はとても簡単だが、しかしなぜかマニュアル通りには動作しなかった。
使い方
以下ではsbt-0.11、Scala-2.9.1、sbt-assembly-0.7.1(2011/10/1)を前提としている。
project/plugins.sbtを作成して以下を記述
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.7.1") // あるいは他のバージョン
build.sbtに以下を記述
import AssemblyKeys._ // put this at the top of the file seq(assemblySettings: _*)
※build.sbtではなく、.scalaに以下を記述する方法は、なぜかうまくいかなかった。
lazy val sub = Project("sub", file("sub")) settings(sbtassembly.Plugin.assemblySettings: _*)
この状態で、assemblyが読み込まれていることを対話モードで確認
> a <-- タブを押す about add-default-commands alias all-dependencies app-configuration append artifact artifact-classifier artifact-name artifact-path artifacts assembly assembly-assemble-artifact assembly-default-jar-name assembly-excluded-files assembly-excluded-jars assembly-jar-name assembly-option assembly-output-path assembly-package-dependency assembly-package-scala auto-compiler-plugins auto-scala-library
あとは対話モードで
> assembly
とすれば「target/scala_2.9.1/プロジェクト名-assembly-バージョン.jar」というファイルが作成される。 最低でも20Mバイトのファイルになるので非常に時間がかかる。