سؤال

هل هناك مكون إضافي لـ 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top