是否有用于SBT的插件,可以自动安装Jruby并添加一些挂钩以在某些点(例如编译前)自动运行脚本。

背景:对于(升降)项目,我想使用 Sass, ,或更具体地说, 罗盘 作为生成CSS的工具。不幸的是,Sass的Java或Scala克隆还不够。

当然,只需手动生成CSS,然后将其放入存储库,而没有人需要关心它,这根本不是问题。

另一方面,为了简化几个系统的开发,我宁愿在SBT内部有明确的依赖性,这简单地完成了工作。

有什么方法可以实现这一目标吗?
还是通常:有没有办法从Scala内部运行Jruby脚本?

编辑 在标签中添加了Maven-2。也许有一个用于Jruby的Maven Repo,可以使我以某种方式交付和使用它。

有帮助吗?

解决方案

虽然这也许不是最优雅的解决方案,但您始终可以使用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插件 来自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])
      }
    }

实际上,它要做的就是调用带有您传递的RB文件的名称的Jruby Jar文件。当然,将Jruby本身添加为托管依赖性:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top