【问题标题】:Sbt plugin for jrubyjruby 的 Sbt 插件
【发布时间】:2011-05-16 08:01:01
【问题描述】:

是否有可用的 sbt 插件,它可以自动安装 JRuby 并添加一些钩子以在某些点(例如在编译之前)自动运行脚本。

背景:对于(提升)项目,我想使用sass,或者更具体地说,compass 作为生成 css 的工具。不幸的是,Java 或 Scala 的 sass 克隆还不够。

当然,只需手动生成 css 然后将它们放入存储库中,就完全没有问题了。

另一方面,为了简化在多个系统上的开发,我宁愿在 sbt 内部有一个明确的依赖关系,它可以简单地完成工作。

有什么办法可以做到吗?
或者一般来说:有没有办法从 Scala 内部运行 JRuby 脚本?

编辑 将 maven-2 添加到标签中。也许有一个 JRuby 的 maven repo 允许我以某种方式交付和使用它。

【问题讨论】:

标签: maven-2 scala jruby sass sbt


【解决方案1】:

虽然它可能不是最优雅的解决方案,但您始终可以使用 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

【讨论】:

  • 但不幸的是,它需要安装 ruby​​。我宁愿让 sbt 处理所有依赖项。
  • 很公平。添加 jruby 作为依赖应该很容易,但是让 SBT 调用它需要更多的工作。我可能会使用脚本 API,但我已经很久没有使用它了,所以拼凑一个例子需要一点时间。我想要这个选项,所以我会调查一下,看看我能想出什么。
【解决方案2】:

试试我来自 github 的sbt plugin。目前它非常简单,但它应该下载 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])
      }
    }

实际上,它所做的只是使用您传入的 rb 文件的名称调用 jruby jar 文件。当然,将 jruby 本身添加为托管依赖项:

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

它还向 Scala 控制台添加了一个“jirb”命令,让您进入 jirb 会话。

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 2012-03-17
    • 2013-05-12
    • 2011-04-16
    • 2015-06-15
    • 2019-05-11
    • 2012-07-21
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多