2012-07-27 28 views
8

Trước khi tôi có một cái gì đó như thế này (giản thể), sử dụng SBT 0.11.3:Trộn build.sbt với dự án/Build.scala và tập hợp

// project/Build.scala 
import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val standardSettings = Defaults.defaultSettings ++ Seq(
     version  := "0.2", 
     scalaVersion := "2.9.2" 
    ) 

    lazy val main = Project(
     id  = "main", 
     base  = file("."), 
     settings = standardSettings, 
     aggregate = Seq(sub) 
    ) 

    lazy val sub = Project(
     id  = "main-sub", 
     base  = file("sub"), 
     settings = standardSettings 
    ) 
} 

Nhưng tôi muốn giữ lại càng nhiều thông tin càng tốt trong đồng bằng build.sbt tệp. Vì vậy, bây giờ tôi có

// build.sbt 
version  := "0.2" 

scalaVersion := "2.9.2" 

// project/Build.scala 
import sbt._ 
import Keys._ 

object MyBuild extends Build { 
    lazy val main = Project(
     id  = "main", 
     base  = file("."), 
     aggregate = Seq(sub) 
    ) 

    lazy val sub = Project(
     id  = "main-sub", 
     base  = file("sub") 
    ) 
} 

Nhưng điều đó dường như không trộn trong cài đặt của tôi từ build.sbt vào các dự án phụ:

> show version 
[info] main-sub/*:version 
[info] 0.1-SNAPSHOT 
[info] main/*:version 
[info] 0.2 
> show scala-version 
[info] main-sub/*:scala-version 
[info] 2.9.1 
[info] main/*:scala-version 
[info] 2.9.2 

Làm thế nào để khắc phục điều này? Tôi cũng đã cố thêm rõ ràng settings vào tiểu dự án, ví dụ:

  • settings = Defaults.defaultSettings
  • settings = Project.defaultSettings
  • settings = MyBuild.settings
  • settings = main.settings (chắc chắn một điều này nên làm gì ?!)

... nhưng không ai làm việc.

+1

[sbt doc fur multi projects] (https://github.com/harrah/xsbt/wiki/Getting-Started-Multi-Project) gần như có trường hợp của tôi. Nó cho rằng 'build.sbt' chính sẽ được hợp nhất với các tệp' .sbt' từ các tiểu dự án. Nó thậm chí còn đưa ra một ví dụ về việc ghi đè phiên bản, tuy nhiên nó không thể chứng minh được sự thừa kế, điều này sẽ xảy ra theo sự đọc của tôi về tài liệu đó. –

Trả lời

8

Thông tin là một chút ẩn trong phần cuối cùng của sbt's Multi Projects documentation:

Khi có một đơn .scala tập tin thiết lập các dự án khác nhau, thật dễ dàng để sử dụng cài đặt tái sử dụng trên các dự án khác nhau. Nhưng ngay cả khi sử dụng các tệp build.sbt khác nhau, vẫn dễ dàng chia sẻ cài đặt trên tất cả các dự án từ bản dựng chính, bằng cách sử dụng phạm vi ThisBuild để thực hiện cài đặt áp dụng trên toàn cầu.

Như vậy:

// build.sbt 
version in ThisBuild := "0.2" 

scalaVersion in ThisBuild := "2.9.2" 

Wow, đó hút thời gian lớn nếu bạn có hai chục phím.

+1

Bạn có thể thực hiện 'inScope (Scope (Select (ThisBuild), Global, Global, Global)) (Seq (... một loạt các thiết lập ...))' tự động dò tìm tất cả các thiết lập trong 'ThisBuild' – Dan

+0

đã thay đổi? Liên kết chuyển hướng và trang kết quả không đề cập đến 'ThisBuild' này? –

+0

Tài liệu mới liên kết đến các trang 'phạm vi' trong đó 'ThisBuild' được đề cập và có, nó vẫn hợp lệ. –

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