2011-11-11 40 views
8

Các dự án của tôi vẫn đang sử dụng sbt 0.7.7 và tôi thấy rất thuận tiện khi có các lớp tiện ích mà tôi có thể chạy từ dấu nhắc sbt. Tôi cũng có thể kết hợp điều này với các thuộc tính được duy trì riêng - thường cho các giá trị liên quan đến môi trường thay đổi từ máy chủ đến máy chủ. Đây là một ví dụ về định nghĩa dự án của tôi dưới thư mục project/build:sbt 0,11 ví dụ nhiệm vụ chạy cần thiết

class MyProject(info: ProjectInfo) extends DefaultProject(info) { 
    //... 
    lazy val extraProps = new BasicEnvironment { 
    // use the project's Logger for any properties-related logging 
    def log = MyProject.this.log 
    def envBackingPath = path("paths.properties") 
    // define some properties that will go in paths.properties 
    lazy val inputFile = property[String] 
    } 

    lazy val myTask = task { args => 
    runTask(Some("foo.bar.MyTask"), 
     runClasspath, extraProps.inputFile.value :: args.toList).dependsOn(compile) 
     describedAs "my-task [options]" 
    } 
} 

tôi sau đó có thể sử dụng công việc của tôi như my-task option1 option2 dưới vỏ SBT.

Tôi đã đọc tài liệu sbt 0.11 mới tại https://github.com/harrah/xsbt/wiki bao gồm các phần trên TasksTaskInputs và thẳng thắn tôi vẫn đang đấu tranh về cách hoàn thành những gì tôi đã làm trên 0.7.7.

Có vẻ như các thuộc tính bổ sung có thể được thay thế một cách riêng biệt environment.sbt, các tác vụ đó phải được xác định trong project/build.scala trước khi được đặt trong build.sbt. Nó cũng giống như có hỗ trợ hoàn thành, trông rất thú vị.

Ngoài ra, tôi hơi bị choáng ngợp. Làm thế nào để hoàn thành những gì tôi đã làm với sbt mới?

+0

Tôi muốn giúp đỡ, nhưng tôi không nhớ chi tiết về SBT 0.7.7. Tôi tự hỏi nếu câu hỏi này có thể được chia thành nhiều câu hỏi khép kín về sbt 0,11? –

+0

@KiptonBarros, chắc chắn - hãy bắt đầu với 'runTask' cơ bản mà tôi có thể cung cấp các đối số trên trình bao sbt. – huynhjl

+0

Dường như tài liệu của sbt hiện đang được sửa đổi. Tôi nghĩ phần "Định nghĩa tác vụ nhập cơ bản" trên trang wiki của [Nhập nhiệm vụ] (https://github.com/harrah/xsbt/wiki/Input-Tasks) là những gì bạn đang tìm kiếm. –

Trả lời

3

Bạn có thể xác định một nhiệm vụ như thế này:

val myTask = InputKey[Unit]("my-task") 

Và thiết lập của bạn:

val inputFile = SettingKey[String]("input-file", "input file description") 

Bạn cũng có thể xác định một cấu hình mới như:

lazy val ExtraProps = config("extra-props") extend(Compile) 

thêm cấu hình này để dự án của bạn và sử dụng nó để đặt cài đặt cho cấu hình này:

lazy val root = Project("root", file(".")).config(ExtraProps).settings(
    inputFile in ExtraProps := ... 
    ... 
    myTask in ExtraPops <<= inputTask { (argTask:TaskKey[Seq[String]]) => 
    (argTask, inputFile) map { (args:Seq[String], iFile[String]) => 
     ... 
    } 
    } 
).dependsOn(compile) 

sau đó khởi động nhiệm vụ của bạn với ngoại đạo cụ: my-nhiệm vụ

Các vấn đề liên quan