Вопрос

Доступно ли плагин для 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top