Maven 2 jruby的Sbt插件
是否有一个sbt插件可以自动安装JRuby,并添加一些钩子在某些点(例如编译之前)自动运行脚本 背景:对于(lift)项目,我想使用,或者更具体地说,作为生成css的工具。不幸的是,sass的Java或Scala克隆是不够的 当然,只要手动生成css,然后将它们都放在存储库中,就不会有任何问题,而且没有人需要关心它 另一方面,为了简化在几个系统上的开发,我宁愿在sbt中有一个明确的依赖项,它只是简单地完成工作 有什么办法可以做到这一点吗?Maven 2 jruby的Sbt插件,maven-2,scala,jruby,sass,sbt,Maven 2,Scala,Jruby,Sass,Sbt,是否有一个sbt插件可以自动安装JRuby,并添加一些钩子在某些点(例如编译之前)自动运行脚本 背景:对于(lift)项目,我想使用,或者更具体地说,作为生成css的工具。不幸的是,sass的Java或Scala克隆是不够的 当然,只要手动生成css,然后将它们都放在存储库中,就不会有任何问题,而且没有人需要关心它 另一方面,为了简化在几个系统上的开发,我宁愿在sbt中有一个明确的依赖项,它只是简单地完成工作 有什么办法可以做到这一点吗? 或者一般来说:有没有从Scala内部运行JRuby脚本的
或者一般来说:有没有从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
}
}
这里提供了有关外部流程支持的更多信息:从github尝试my。目前它还很简单,但是它应该下载JRubyJAR并允许您在编译之前调用.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])
}
}
它还向Scala控制台添加了一个“jirb”命令,使您进入一个jirb会话。但不幸的是,它需要安装ruby。我宁愿让sbt处理所有的依赖关系。这很公平。将jruby添加为依赖项应该很容易,但是让SBT调用它需要更多的工作。我可能会接触到脚本API,但我已经很久没有使用它了,所以编写一个示例需要一些时间。我希望有这个选择,所以我会调查一下,看看我能想出什么。这很好。现在,我如何使用它通过bundler安装和执行gems?
libraryDependencies ++= Seq(
"org.jruby" % "jruby-complete" % "1.6.5"
)