2010-11-26 2 views
5

Есть ли плагин для sbt, который автоматически устанавливает JRuby и добавляет некоторые крючки для автоматического запуска скриптов в определенные моменты (например, перед компиляцией).Плагин Sbt для jruby

Фон: Для проекта (лифта), я хочу использовать sass, или, точнее, compass как инструмент для генерации css. К сожалению, Java-клона или Scala-клона не хватит.

Конечно, было бы нецелесообразно просто генерировать css вручную, а затем помещать как внутри репозитория, так и никто никогда не должен заботиться об этом.

С другой стороны, чтобы облегчить разработку на нескольких системах, я бы предпочел иметь явную зависимость внутри sbt, которая просто выполняет эту работу.

Есть ли способ достичь этого?
Или вообще: Есть ли способ запуска скриптов JRuby изнутри Scala?

Редактировать Добавлено maven-2 в теги. Может быть, есть maven repo для JRuby, который позволяет мне как-то доставлять и использовать его.

+1

Существует http://mvnrepository.com/artifact/org.jruby/ –

+1

Отлично. Теперь, как я могу использовать это для установки и выполнения камней через bundler? – 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

Попробуйте мой sbt plugin из 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]) 
     } 
    } 

Действительно все это делает, вызывая банку файл JRuby с именем ПУЭ файл, который вы прошли в И, конечно же, добавив JRuby себя. управляемая зависимость:

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

Он также добавляет команду «jirb» на консоль Scala, которая ставит вас в jirb сессии.