Scalaプログラムの開発時に、開発中のプログラムを普通の環境で使いたいことがよくあります。そのたびにパッケージングして配備するのも大変ですし、javaコマンドで直接起動する場合には依存するJARファイル群にクラスパスを通す設定が困難を極めます。
この問題を解決するために作成したのがgoldenport-runnerです。
goldenport-runnerはensimeのコンフィグレーションファイル(.ensime)から、プログラムの実行に必要な情報を収集し起動するアプリケーション・ランチャーです。(.ensimeの情報を読み込むためにgoldenport-sexprを使用しています。)
インストール
以下のjarファイルをダウンロードしてlibディレクトリなどにコピーします。
使用方法
以下のようにプロジェクトのディレクトリとアプリケーションのメインとなるクラス名を指定し、続けてアプリケーションの引数を渡します。
$ java -jar goldenport-runner_2.9.2-0.1.0-one-jar.jar プロジェクトディレクトリ クラス名 引数
以下のようなスクリプトを作ってbinディレクトリに入れておくと便利です。
#! /bin/sh JAVA_OPTS="-Xmx512m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8" java $JAVA_OPTS -jar $HOME/lib/goldenport-runner_2.9.2-0.1.0-one-jar.jar $HOME/src/mycommand com.example.mycommand.Main "$@"
使用例
sbtプロジェクトにensimeプラグインを追加したプロジェクトを用意します。
手っ取り早く試すには、昨日紹介したscala-sbt.g8を使うとよいでしょう。
$ g8 asami/scala-sbt
asami/scala-sbtのsbtプロジェクトではensimeプラグインが予め設定されています。
g8コマンドでプロジェクトを生成します。デフォルトの値で生成するとディレクトリcommandの下にプロジェクトが生成されます。(commandの部分はプロジェクト名によって変わります。)
$ cd command $ ls README build.sbt project src
プロジェクトをビルドします。
$ sbt test ... [info] CommandSpec: [info] Command [info] should execute that [info] - empty arguments [info] - one argument [info] Passed: : Total 2, Failed 0, Errors 0, Passed 2, Skipped 0 [success] Total time: 4 s, completed ...
ensimeのコンフィグレーションファイル(.ensime)を生成します。
$ sbt "ensime generate"
goldenport-runnerで実行します。
$ java -jar ~/Downloads/goldenport-runner_2.9.2-0.1.0-one-jar.jar . com.example.command.Main ls project README target build.sbt src
用途
goldenport-runnerは、元々プログラム開発時のツールとして作ってみたのですが、Scalaスクリプト的な使い方が便利ではないかと思いつきました。
Scalaはスクリプト機能を持っていますが、依存jarが一つでもあると簡単に実行することはできないため、事実上スクリプト的な使い方をすることが困難でした。scalazやScala IOが使えないと不便でしかたありません。
goldenport-runnerを用いることで、sbtプロジェクトで普通に開発したScalaプログラムをスクリプト的に手軽に使えるようになります。scala-sbt.g8もこの用途を意識した構成になっています。
ちょっとした運用ツールなどスクリプト的な用途のプログラムでも、ちょっと複雑になるとテストプログラムも必要になります。また、TDDやBDD的な作り方ができると便利です。そういう意味でsbtプロジェクトとして作ってgoldenport-runnerで運用するのは、なかなか便利そうです。
ScalaスクリプトにはsbtベースのScriptsというアプローチもあるので、適材適所で使い分けするのもよいかもしれません。
0 件のコメント:
コメントを投稿