Sbt плагин для Jruby - PullRequest
       15

Sbt плагин для Jruby

5 голосов
/ 26 ноября 2010

Имеется ли плагин для sbt, который автоматически устанавливает JRuby и добавляет некоторые ловушки для автоматического запуска скриптов в определенные моменты (например, перед компиляцией).

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

Конечно, это не будет проблемой - просто сгенерировать CSS вручную, а затем поместить оба в хранилище, и никто никогда не будет заботиться об этом.

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

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

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

Ответы [ 2 ]

4 голосов
/ 29 ноября 2010

Хотя это, возможно, не самое элегантное решение, вы всегда можете вызвать внешние сценарии, используя поддержку процессов в 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

1 голос
/ 21 декабря 2011

Попробуйте мой sbt плагин от 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])
      }
    }

На самом деле все, что он делает, - это вызывает jar-файл jruby с именем переданного вами файла rb. И, конечно, добавляет сам jruby в качестве управляемой зависимости:

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

Также добавляется «jirb»"команда для консоли Scala, которая переводит вас в сеанс jirb.

...