2012-06-09 15 views
37

Mój projekt scala/sbt używa grizzled-slf4j i logback. Zależność od strony trzeciej wykorzystuje rejestrowanie Apache Commons.Jak wykluczyć logowanie commons z projektu scala/sbt/slf4j?

Używając Java/Maven, użyłbym jcl-over-slf4j i logback-classic tak, żebym mógł użyć logback jako zunifikowanego zaplecza logującego.

Chciałbym również wyeliminować zależność commons-logging że lib osób trzecich pozwoliłby SBT ciągnąć w I wykonaj następujące czynności w Maven (który jest zalecany przez http://www.slf4j.org/faq.html#excludingJCL).

<dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>1.1.1</version> 
    <scope>provided</scope> 
</dependency> 

I pytanie jest , jak zrobić to samo z sbt?

Odpowiedz

55

Podejście Heiko prawdopodobnie zadziała, ale nie doprowadzi do pobrania żadnej zależności od biblioteki trzeciej. Jeśli chcesz wykluczyć konkretny, użyj exclude.

libraryDependencies += "foo" % "bar" % "0.7.0" exclude("org.baz", "bam") 

lub

... excludeAll(ExclusionRule(organization = "org.baz")) // does not work with generated poms! 
+25

To działa. I moim ostatecznym rozwiązaniem jest 'libraryDependencies ++ = Seq (...). Map (_. Exclude (" commons-logging "," commons-logging "))' – wks

+3

Dokumentacja dla tego jest tutaj: http: // www .scala-sbt.org/release/docs/Detailed-Topics/Library-Management # exclude-transitive-dependencies –

+0

To właściwie 'ExclusionRule', a nie' ExclusionRules' – jeffreyveon

2

Dodaj nieprzechodni swoją zależność od bibliotek zewnętrznych, np.

libraryDependencies += "foo" %% "bar" % "1.2.3" intransitive 
+7

downvoted, przyczyną może prowadzić do problemów, gdy masz więcej niż jedną zależność od strony trzeciej, jak drexin zauważył, przepraszam. –

+0

To rozwiązanie faktycznie działało dla mnie (usunęło wszystkie zależności 3-osobowe dla 1 jawnej zależności). –

4

Poznałem ten sam problem przed. Rozwiązałem dodając zależność jak

libraryDependencies += "foo" % "bar" % "0.7.0" exclude("commons-logging","commons-logging") 

lub

libraryDependencies += "foo" % "bar" % "0.7.0" excludeAll(ExclusionRule(organization = "commons-logging")) 
8

Dla SBT 0.13.8 i powyżej, można także spróbować wykluczenia zależność na poziomie projektów:

excludeDependencies += "commons-logging" % "commons-logging" 
Powiązane problemy