2010-11-26 18 views
5

JRubyを自動的にインストールし、特定の時点(例えばコンパイル前)でスクリプトを自動的に実行するためのフックを追加するsbt用のプラグインがありますか?jrubyのSbtプラグ

背景:(リフト)プロジェクトでは、sass、具体的にはcompassをCSSを生成するツールとして使用します。残念ながら、JavaやScalaのsassクローンでは不十分です。

もちろん、手動でcssを生成してリポジトリ内に入れても誰もそれを気にする必要はありません。

一方、いくつかのシステムでの開発を容易にするために、単純に作業を行うsbtの中に明確な依存関係があると思います。

これを達成する方法はありますか?
一般的には、Scalaの中からJRubyスクリプトを実行する方法はありますか?

タグにmaven-2を追加しました。たぶん、JRubyのためのメイキングレポがあり、私は何とかそれを提供し、使用することができます。

+1

http://mvnrepository.com/artifact/org.jruby/ –

+1

素晴らしいです。さて、これを使ってバンドルラー経由で宝石をインストールして実行するにはどうしたらいいですか? – Debilski

答えて

4

おそらく最も洗練されたソリューションではありませんが、SBTのプロセスサポートを使用していつでも外部スクリプトを呼び出すことができます。

import sbt._ 
import Process._ 

class Project(info: ProjectInfo) extends DefaultProject(info) { 
    lazy val runSomething = task { 
    "ruby somescript.rb" ! log 
    None 
    } 
} 

ここで利用可能な外部プロセスのサポートについて、もう少し情報があります:http://code.google.com/p/simple-build-tool/wiki/Process

+2

しかし残念ながら、それはルビーがインストールされている必要があります。むしろすべての依存関係をsbtで処理したいと思います。 – Debilski

+1

十分に公正。依存関係としてjrubyを追加するのは簡単なはずですが、SBTに呼び出すにはもう少し作業が必要です。私はおそらくスクリプトAPIのために手を差し伸べるだろうが、私はそれをあまりにも長く使っていないので、一緒に模範をまとめることは少ししかかからないだろう。私はこのオプションを持っていたいので、私は調査し、私が思いつくことができるものを見てみましょう。 –

1

はgithubのから私のsbt pluginをお試しください。それは今のところ非常に素朴ですが、jruby jarをダウンロードし、コンパイルする前に.rbファイルを呼び出さなければなりません。

プラグインの根性は本当に簡単です:それはやっている

import sbt._ 

    object SbtJRuby extends Plugin { 
     object SbtJRubySettings { 
     lazy val settings = Seq(Keys.commands += jirb, tx, jrubyFile := file("fnord.rb")) 
     } 

     def jirb = Command.args("jirb", "<launch jirb>") { (state, args) => 
     org.jruby.Main.main(List("-S", "jirb").toArray[String]) 
     state 
     } 

     val jruby = TaskKey[Unit]("jruby", "run a jruby file") 
     val jrubyFile = SettingKey[File]("jruby-file", "path to file to run with JRuby") 

     val tx = jruby <<= (jrubyFile, Keys.baseDirectory) map { (f: File, b: File) => 
     val rb = (b/f.toString).toString 
     // println("jruby with " + rb) 
     org.jruby.Main.main(List(rb).toArray[String]) 
     } 
    } 

本当にすべてはあなたが渡されてきたRBファイルの名前でJRubyのjarファイルを呼び出すそしてもちろんとしてのJRuby自体を追加しています。

libraryDependencies ++= Seq(
    "org.jruby" % "jruby-complete" % "1.6.5" 
) 

また、jirbセッションにあなたを入れる「jirb」コマンドがScalaコンソールに追加されています。