SBT плагин для jruby
Вопрос
Доступно ли плагин для SBTT, который автоматически устанавливает JRuby и добавляет некоторые крючки для автоматического запуска сценариев в определенные точки (например, перед компиляцией).
Фон: для проекта (лифта) я хочу использовать сасс, или конкретно, компас в качестве инструмента для генерации CSS. К сожалению, а Java или Scala клону Sass не хватило бы, к сожалению.
Конечно, вообще не было бы проблемой, чтобы просто генерировать CSS вручную, а затем поставить как внутри хранилища, и никто никогда не должен заботиться об этом.
С другой стороны, облегчить развитие нескольких систем, я бы предпочел иметь четкую зависимость внутри SBT, которая просто работает.
Есть ли способ достичь этого?
Или вообще: есть ли способ запустить JRuby Scripts изнутри Scala?
Редактировать Добавил Maven-2 на теги. Возможно, есть Maven Reppo для JRuby, которая позволяет мне как-то доставлять и использовать.
Решение
Хотя это, возможно, не самое элегантное решение, вы всегда можете вызвать внешние сценарии, используя поддержку процесса в 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 Plugin от github. Это очень голые кости сейчас, но он должен загрузить Jruby Jruby и позволить вам позвонить в файл .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])
}
}
Действительно все это делает, это призвать файл Jruby JAR с именем файла RB, в котором вы передали. И, конечно, добавляя себя JRuby в качестве управляемой зависимости:
libraryDependencies ++= Seq(
"org.jruby" % "jruby-complete" % "1.6.5"
)
Он также добавляет команду «JIRB» на Console Scala, которая помещает вас в сеанс JIRB.