البرنامج المساعد SBT لـ JRUBY
سؤال
هل هناك مكون إضافي لـ SBT متاح يقوم تلقائيًا بتثبيت JRuby ويضيف بعض السنانير لتشغيل البرامج النصية تلقائيًا في بعض النقاط (على سبيل المثال قبل التجميع).
الخلفية: لمشروع (المصعد) ، أريد استخدامه ساس, ، أو بشكل أكثر تحديدا ، بوصلة كأداة لتوليد CSS. لن يكون استنساخ جافا أو سكالا من ساس كافيًا ، لسوء الحظ.
بالطبع ، لن تكون مشكلة على الإطلاق لتوليد CSS يدويًا ثم وضع كل من المستودع ولا يحتاج أي شخص إلى الاهتمام به.
من ناحية أخرى ، لتخفيف التطوير على العديد من الأنظمة ، أفضل أن أحصل على تبعية واضحة داخل SBT والتي تقوم ببساطة بالعمل.
هل هناك أي طريقة لتحقيق ذلك؟
أو بشكل عام: هل هناك طريقة لتشغيل نصوص Jruby من داخل Scala؟
يحرر وأضاف Maven-2 إلى العلامات. ربما هناك ريبو Maven لـ 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 من جيثب. إنها عارية للغاية في الوقت الحالي ، ولكن يجب أن تنزيل جرة 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" إلى وحدة التحكم Scala التي تضعك في جلسة JIRB.