2010-11-26 4 views
5

Gibt es ein Plugin für sbt verfügbar, das JRuby automatisch installiert und einige Haken hinzufügt, um Scripts an bestimmten Punkten (z. B. vor der Kompilierung) automatisch auszuführen.Sbt plugin für jruby

Hintergrund: Für ein (Aufzugs-) Projekt möchte ich sass oder genauer gesagt compass als Werkzeug zum Erzeugen des CSS verwenden. Ein Java oder Scala Klon von Sass wäre leider nicht genug.

Natürlich wäre es überhaupt kein Problem, die CSS nur manuell zu generieren und dann beide in das Repository zu legen, und niemand muss sich jemals darum kümmern.

Auf der anderen Seite, um die Entwicklung auf mehreren Systemen zu erleichtern, würde ich lieber eine klare Abhängigkeit innerhalb sbt haben, die einfach die Arbeit macht.

Gibt es eine Möglichkeit, dies zu erreichen?
Oder generell: Gibt es eine Möglichkeit, JRuby-Skripte von Scala aus zu starten?

Bearbeiten Maven-2 zu den Tags hinzugefügt. Vielleicht gibt es ein Maven Repo für JRuby, das es mir ermöglicht, es irgendwie zu liefern und zu benutzen.

+1

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

+1

Großartig. Nun, wie würde ich dies verwenden, um Edelsteine ​​über Bundler zu installieren und auszuführen? – Debilski

Antwort

4

Obwohl es vielleicht nicht die eleganteste Lösung ist, können Sie externe Skripts immer mit der Prozessunterstützung in SBT aufrufen.

import sbt._ 
import Process._ 

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

Es ist ein bisschen mehr Informationen über die externe Prozessunterstützung finden Sie hier: http://code.google.com/p/simple-build-tool/wiki/Process

+2

Leider muss Ruby installiert werden. Ich würde lieber alle Abhängigkeiten behandeln. – Debilski

+1

Fair genug. Das Hinzufügen von jruby als Abhängigkeit sollte einfach sein, aber SBT dazu zu bringen, es aufzurufen, wird ein bisschen mehr Arbeit erfordern. Ich würde wahrscheinlich nach der Scripting-API greifen, aber ich habe sie nicht viel zu lange benutzt, also würde ein Beispiel ein wenig dauern. Ich hätte gerne diese Option, also werde ich nachforschen und sehen, was ich mir vorstellen kann. –

1

Versuchen Sie, meine sbt plugin von GitHub. Es ist im Moment sehr leer, aber es sollte das jruby jar herunterladen und Ihnen erlauben, vor dem Kompilieren eine .rb-Datei aufzurufen.

Die Eingeweide des Plugins sind wirklich einfach:

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]) 
     } 
    } 

wirklich alles was man tut, ist die jruby JAR-Datei mit dem Namen der rb Datei ruft Sie in bestanden haben und natürlich das Hinzufügen jruby sich als. eine verwaltete Abhängigkeit:

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

Es fügt auch einen „jirb“ Befehl an die Scala-Konsole, die Sie in eine jirb Sitzung legt.