2010-11-26 16 views
5

Có plugin cho sbt có sẵn tự động cài đặt JRuby và thêm một số móc để tự động chạy tập lệnh tại một số điểm nhất định (ví dụ: trước khi biên soạn).Plugin sbt cho jruby

Cơ sở: Đối với dự án (nâng), tôi muốn sử dụng sass hoặc cụ thể hơn, compass làm công cụ tạo css. Một bản sao của Java hoặc Scala của sass sẽ không đủ, thật không may.

Tất nhiên, sẽ không có vấn đề gì khi chỉ tạo css theo cách thủ công và sau đó đặt cả hai vào trong kho và không ai cần quan tâm đến nó.

Mặt khác, để dễ dàng phát triển trên một số hệ thống, tôi muốn có sự phụ thuộc rõ ràng bên trong sbt mà chỉ đơn giản là thực hiện công việc.

Có cách nào để đạt được điều này không?
Hoặc nói chung: Có cách nào để chạy tập lệnh JRuby từ bên trong Scala không?

Chỉnh sửa Đã thêm maven-2 vào thẻ. Có lẽ có một repo maven cho JRuby cho phép tôi để cung cấp và sử dụng nó bằng cách nào đó.

+1

Có http://mvnrepository.com/artifact/org.jruby/ –

+1

Tuyệt vời. Bây giờ, làm thế nào tôi sẽ sử dụng điều này để cài đặt và thực hiện đá quý thông qua bundler? – Debilski

Trả lời

4

Mặc dù nó có lẽ không phải là giải pháp thanh lịch nhất, bạn luôn có thể gọi các tập lệnh bên ngoài bằng cách sử dụng Hỗ trợ quy trình trong SBT.

import sbt._ 
import Process._ 

class Project(info: ProjectInfo) extends DefaultProject(info) { 
    lazy val runSomething = task { 
    "ruby somescript.rb" ! log 
    None 
    } 
} 

Có biết thêm một chút thông tin về sự hỗ trợ quá trình bên ngoài có sẵn ở đây: http://code.google.com/p/simple-build-tool/wiki/Process

+2

Nhưng thật không may, nó đòi hỏi phải cài đặt ruby. Tôi thà có sbt xử lý tất cả các phụ thuộc. – Debilski

+1

Đủ công bằng. Việc thêm jruby như một sự phụ thuộc phải dễ dàng, nhưng việc SBT gọi nó sẽ tốn nhiều công sức hơn một chút. Tôi có lẽ sẽ tiếp cận với các API kịch bản, nhưng tôi đã không sử dụng nó quá lâu, do đó, whipping cùng một ví dụ sẽ mất một chút. Tôi muốn có tùy chọn này, vì vậy tôi sẽ điều tra và xem những gì tôi có thể đưa ra. –

1

Hãy thử sbt plugin tôi từ github. Bây giờ nó rất sơ sài, nhưng nó sẽ tải xuống jar jruby và cho phép bạn gọi một tệp .rb trước khi biên dịch.

Các ruột của plugin là thực sự đơn giản:

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]) 
     } 
    } 

Thật tất cả nó làm là kêu gọi các tập tin jar JRuby với tên của tập tin rb bạn đã vượt qua Và tất nhiên thêm JRuby chính nó như là. phụ thuộc được quản lý:

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

Lệnh này cũng thêm lệnh "jirb" vào bảng điều khiển Scala đưa bạn vào phiên jirb.