ScalaをJar化してみる
ScalaはJavaVM上で動くのでコンパイルしてclassファイルを出力することができます。
classファイルをまとめてjar化して様々な環境で動かしてみたいという欲求を満たしましょう。
ちょっとしたことを忘れるとはまってしまうのでここに記しておきます。
まず、コンパイルです。
ここで注意するべき点はmainメソッドを含むobjectを作ることですね。
例えば以下のような例が挙げられます。
// hello.scala object HelloWorld { def main(args:Array[String]) = println("HelloWorld!") }
objectのキーワードはシングルトンであるので静的のように振舞います。
(簡単に言うとC/C++やJavaでいうstaticみたいなものです。…ちょっと違いますが)
まずこれをコンパイルします。
scalac hello.scala
成功すると以下のclassファイルが出力されます。
・HelloWorld.class
・HelloWorld$.class
実行してみて以下のようになれば成功しています。
>scala HelloWorld HelloWorld
そして、jar化します。
この時に注意してほしいことはscalaのclassにはscala-library.jarというものが必要になってきます。
classpathで設定してもいいのですが今回は埋め込みます。
まず、scala-library.jarをコピーしてきます。(同じディレクトリに入れとくといいと思います)
ubuntuの場合 /usr/java/scla-library.jar というところにあります。
持ってきたら解凍しましょう。(jarのままだとうまくいきません)
jar xf scala-library.jar
次にマニフェストファイルを作ります。
manifest.mfとでもしておきましょうか。
Manifest-Version: 1.0 Main-Class: HelloWorld Class-Path: scala-library.jar
:の後に半角空白を入れないと動かないみたいです。
マニフェストファイルを作ったらいよいよjarファイルを作ります。
jar cfm hello.jar manifest.mf *.class scala
とやるとclassファイルとscala-libraryがパッキングされて、hello.jarが生成されます。
> java -jar hello.jar HelloWorld
これで成功です。
以上の作業をまとめてbuild.shとするのもいいかもしれません。
scalac *.scala jar cfm xxx.jar manifest.mf *.class scala
これで簡単にビルドできますね。