2012-05-01 26 views
6

Tôi có một dự án được xây dựng với sbt 0,11. Tôi đang cố gắng để tạo ra một giao diện người dùng đơn giản với Scala Swing, vì vậy điều đầu tiên là thêm một sự phụ thuộc vào scala-đu trong build.sbt tôi:Tái sử dụng bất động sản với số phiên bản khi thêm một phụ thuộc vào sbt

libraryDependencies += "org.scala-lang" % "scala-swing" % "2.9.1-1" 

Nhưng tôi có một scalaVersion SettingKey định nghĩa:

scalaVersion := "2.9.1-1" 

Tôi làm cách nào để tham chiếu thuộc tính đó? Nếu tôi cố gắng sử dụng nó như

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion 

Trình biên dịch than phiền rằng nó tìm thấy sbt.SettingKey [String] trong khi String được mong đợi. Có các phương pháp get(...)evaluate(...) trên SettingKey nhưng chúng yêu cầu một số thông số Thiết lập [Phạm vi] được chuyển vào.

Cách đơn giản nhất để chỉ tham chiếu thuộc tính này là gì?

Trả lời

6

Bạn cần phải cho hệ thống mà libraryDependencies bây giờ phụ thuộc vào scalaVersion:

libraryDependencies <+= (scalaVersion) { sv => "org.scala-lang" % "scala-swing" % sv } 

(đó là định dạng ưa thích của tôi, nó thực sự gọi phương thức apply trên scalaVersion vì vậy bạn có thể viết nó một vài cách khác nhau, ví dụ: . scalaVersion("org.scala-lang" % "scala-swing" % _))

Nếu bạn có nhiều thiết lập bạn muốn phụ thuộc vào cùng một lúc, bạn muốn áp dụng trên tuple trong số họ:

foo <<= (scalaVersion, organization) { (sv, o) => o + " uses Scala " + sv } 
+0

Cám ơn nói với các lựa chọn thay thế. Tôi luôn cảm thấy rằng SBT là quá phức tạp. –

0

Something như

libraryDependencies <+= scalaVersion { v => "org.scala-lang" % "scala-swing" % v} 

nên làm việc.

2
libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" % _) 

< Cho SBT biết rằng cài đặt của bạn phụ thuộc vào cài đặt khác.

+ Hãy nói với SBT rằng bạn muốn thêm giá trị khác, không thay thế giá trị hiện tại (cũng có nghĩa là nội dung của cài đặt là một chuỗi và bạn đang thêm một phần tử vào đó).

Cú pháp setting(function) cũng giống như function(setting), trong đó function có cài đặt được đánh giá ở ngữ cảnh thích hợp làm tham số. Tôi thậm chí không biết làm thế nào để viết nó, và nó sẽ rất tiết, vì vậy các phím tắt là rất hữu ích.

Bạn cũng có thể sử dụng (setting 1, setting 2)((a, b) => ...) để thực hiện các phụ thuộc trên nhiều cài đặt.

PS: Các tính năng sau có thể hoạt động tốt và ngắn hơn một chút, nhưng nó không được dùng nữa nếu không có cờ trình biên dịch đặc biệt là 2.10.0.

libraryDependencies <+= scalaVersion("org.scala-lang" % "scala-swing" %) 
1

Nhận ra câu trả lời này cũ - thêm câu trả lời trong trường hợp bất kỳ ai khác bắt gặp câu trả lời. Chỉ cần thêm .value vào biến scalaVersion để có được giá trị chuỗi:

libraryDependencies += "org.scala-lang" % "scala-swing" % scalaVersion.value 
Các vấn đề liên quan