sbt-native-packager でお手軽に Scala アプリケーションの deb, rpm, zip を作成する

Scala Advent Calendar 13 日目の記事です。


sbt-native-packager の紹介をします。


https://github.com/sbt/sbt-native-packager
http://www.scala-sbt.org/sbt-native-packager/

sbt-native-packager とは

rpm, deb, universal(zip) パッケージが簡単に作れる sbt プラグインです。

サンプルアプリ

実際にいじってみましょう。
Hello というだけの簡単なアプリをパッケージングしてみます。

// src/main/scala/example/Hello.scala
package example

object Hello {
  def main(args: Array[String]): Unit = {
    println("Hello! Scala.")
  }
}

設定

sbt の設定はこんな感じ。特に難しくはないでしょう。

// project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "0.6.4")
// build.sbt
import com.typesafe.sbt.SbtNativePackager._
import com.typesafe.sbt.packager.Keys._

packageArchetype.java_application

name := "hello"

packageDescription := "hello"

maintainer := "tototoshi"

Debian パッケージを作成する

Debian パッケージは debian:packageBin コマンドで作成できます。
いくつか依存しているコマンドがあるようなので(fakeroot とか)怒られたら適宜インストールしてください。

> debian:packageBin

これで target/hello-0.1.0.deb ができるのでインストールしてみます。

> sudo dpkg -i target/hello-0.1.0.deb
$ hello
Hello! Scala.

めでたし。
rpm は試してないけど rpm:packageBin を使えば出来るそうです。

zip アーカイブを作成する

Mac, Windows 向けには zip アーカイブ(universal パッケージ)で配布します。

> universal:packageBin

このコマンドで target/universal/hello-0.1.0.zip ができます。


展開すると bin, lib というディレクトリができていることがわかります。
./bin/hello は sbt-native-packager が勝手に作ってくれた起動スクリプトです。
./bin/hello.bat もあるので Windows でも使えますね。sbt-start-script は Windows基本的に無視だったので Windows 派はこれだけでうれしいですね。

├── bin
│ ├── hello
│ └── hello.bat
└── lib
    ├── hello.hello-0.1.0.jar
    └── org.scala-lang.scala-library-2.10.2.jar

以上、sbt-native-packager の紹介でした。
sbt-start-script の後継として位置づけされているようなので、sbt-start-script を使っている方は乗り換えを検討してみてください。