Jruby用のSBTプラグイン
質問
Jrubyを自動的にインストールし、特定のポイントでスクリプトを自動的に実行するためのフックを自動的にインストールするSBT用のプラグインがありますか(たとえば、コンパイル前)。
背景:(リフト)プロジェクトの場合、使用したい サス, 、またはより具体的には、 方位磁針 CSSを生成するためのツールとして。残念ながら、SASSのJavaまたはScalaクローンでは十分ではありません。
もちろん、CSSを手動で生成してからリポジトリの内側に配置するだけで、誰もそれを気にする必要はありません。
一方、いくつかのシステムの開発を容易にするために、単に作業を行うSBT内に明確な依存関係を持ちたいと思います。
これを達成する方法はありますか?
または一般的に:Scala内からJrubyスクリプトを実行する方法はありますか?
編集 タグにmaven-2を追加しました。 Jruby用のMaven Repoがあるかもしれません。
解決
おそらく最もエレガントなソリューションではありませんが、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
他のヒント
私を試してみてください SBTプラグイン Githubから。今のところ非常に裸の骨ですが、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"
)
また、Scalaコンソールに「Jirb」コマンドを追加して、Jirbセッションになります。