是否有一个可用于sbt的插件,它可以自动安装JRuby并添加一些钩子来在某些点(例如编译之前)自动运行脚本。
背景:对于(lift)项目,我希望使用沙斯,或者更具体地说,使用罗盘作为生成css的工具。不幸的是,Java或Scala的sass克隆是不够的。
当然,只要手动生成css,然后将其放在存储库中,并且没有人需要关心它,就不会有问题了。
另一方面,为了简化几个系统上的开发,我希望sbt内部有一个明确的依赖关系,而sbt就是这样做的。
有办法做到这一点吗?
或者一般情况下:有办法从Scala内部运行JRuby脚本吗?
编辑将maven-2添加到标记中。也许JRuby有一个maven回购,它允许我以某种方式交付和使用它。
发布于 2010-11-29 04:13:27
虽然它可能不是最优雅的解决方案,但始终可以使用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
发布于 2011-12-21 00:04:47
试试我在github的sbt插件。现在它非常简单,但是它应该下载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])
}
}实际上,它所做的就是用您传入的rb文件的名称调用jruby文件。当然,将jruby本身添加为托管依赖项:
libraryDependencies ++= Seq(
"org.jruby" % "jruby-complete" % "1.6.5"
)它还向Scala控制台添加了一个" jirb“命令,将您放入jirb会话。
https://stackoverflow.com/questions/4287932
复制相似问题