题
是否有用于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会话。
不隶属于 StackOverflow