2014-09-09 15 views
18

Bạn sẽ loại trừ sự phụ thuộc transitive toàn cầu như thế nào? Dự án của tôi phụ thuộc vào rất nhiều thư viện Twitter hoặc trên các thư viện phụ thuộc vào các thư viện Twitter. Tôi không muốn slf4j-jdk14 trong classpath của tôi, không có vấn đề gì (tôi sử dụng logback như slf4j ràng buộc).Có cách nào đơn giản để chỉ định phụ thuộc toàn cầu không bao gồm trong SBT

Hiện nay tôi làm điều này:

"com.twitter" %% "finagle-thriftmux" % "6.16.0" exclude("org.slf4j", "slf4j-jdk14") 

nhưng mỗi lần ai đó thêm một sự phụ thuộc có sử dụng slf4j-jdk14 tôi có thể nhận được nó trở lại vào classpath.

Trả lời

31

Đối với một nhóm phụ thuộc bạn có thể làm điều đó như sau:

libraryDependencies ++= Seq(
    "com.twitter" %% "finagle-thriftmux" % "6.16.0", 
    "com.twitter" % "lib" % "2.0", 
    "com.domain" % "some-other-lib" % "1.0" 
).map(_.exclude("org.slf4j", "slf4j-jdk14")) 

Cập nhật

Kể từ SBT 0.13.8 còn another possibility là để loại trừ phụ thuộc trên toàn cầu. Ví dụ trên có thể được viết gọn hơn nhiều.

excludeDependencies += "org.slf4j.slf4j-jdk14" 

Tuy nhiên, tại thời điểm viết tính năng này được đánh dấu là thử nghiệm để bạn nên biết về cả hai tùy chọn.

5
libraryDependencies := libraryDependencies.value.map(_.exclude("groupid", "artifactname")) 
26

excludeDependencies += "org.slf4j" % "slf4j-jdk14"

+2

giải pháp này có vẻ thanh lịch với tôi hơn một chấp nhận – Flo354

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