2014-09-15 15 views
6

Từ một số tài liệu SBT (ví dụ scopes), tôi thấy:Sự khác biệt từ `{.}/*: Name` và` */*: name` trong sbt?

{.}/*:name 

nghĩa name trong entire build (sử dụng name in ThisBuild để xác định nó)

*/*:name 

nghĩa name trong global project (sử dụng name in Global để xác định nó)

(PS: Tôi bỏ qua phần cấu hình *:)

Nhưng, tôi vẫn không biết sự khác biệt giữa chúng là gì, chúng dường như giống hệt với tôi.

Có điều gì tôi có thể làm với cái này thay vì cái khác không?

+0

Tôi đã đọc câu hỏi này, nhưng vẫn chưa rõ ràng: http://stackoverflow.com/questions/18289766/what-is-the-difference-between-thisbuild-and-global-scopes – Freewind

Trả lời

2

Bất kể phiên bản nào bạn đã chỉ định trong ThisBuild sẽ được áp dụng cho tất cả các dự án trong bản dựng của bạn, ghi đè mọi thứ có thể được xác định trong Toàn cầu.

Ví dụ: Key "phiên bản"

Đối với phạm vi toàn cầu được quy định tại Defaults.scala có giá trị "0,1-SNAPSHOT".

Đối với dự án của mình trong xây dựng này, bạn có thể muốn ghi đè lên rằng với:

version in ThisBuild := "3.0.1" 

Vì vậy, bởi vì [/ * {.}: Phiên bản] có ưu tiên hơn [*/*: Phiên bản], bất cứ khi nào bạn nhận được "phiên bản" trong các dự án của bạn, bạn lấy "3.0.1" thay vì "0.1-SNAPSHOT".

Điều này khá nhiều giải thích sự khác biệt và cách bạn có thể sử dụng cái này chứ không phải cái kia.

+1

Vì vậy, 'Toàn cầu' có phạm vi lớn hơn 'ThisBuild', vì nó có thể là giá trị mặc định trên các bản dựng khác nhau (ví dụ: được định nghĩa trong sbt hoặc trong sbt plugin), nhưng' ThisBuild' chỉ là tham chiếu hiện tại và có thể ghi đè giá trị mặc định chung? – Freewind

+0

Tại sao một người muốn các giá trị khác nhau trong Global và ThisBuild? –

+0

Tôi cũng đã có một thời gian khó khăn trong việc hiểu điều này, nhưng một khi nó đã được đề cập rằng một plugin có thể xác định một số thiết lập trong phạm vi toàn cầu nó đã rõ ràng hơn với tôi. Ngoài các plugin, tôi không thấy bất kỳ trường hợp sử dụng nào để sử dụng Global vs ThisBuild. –

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