2012-06-09 19 views
37

Mi proyecto scala/sbt usa grizzled-slf4j y logback. Una dependencia de terceros utiliza Apache Commons Logging.Cómo excluir commons-logging de un proyecto scala/sbt/slf4j?

Con Java/Maven, me gustaría utilizar JCL-sobre-slf4j y logback-clásica de modo que pueda utilizar logback como backend de registro unificado.

que también eliminaría la dependencia commons-logging que la lib terceros dejaría SBT tire en que hacer lo siguiente en Maven (que es recomendado por 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> 

Y la pregunta es , ¿cómo hacer lo mismo con sbt?

Respuesta

55

de enfoque Heiko probablemente va a funcionar, pero dará lugar a ninguna de las dependencias de la tercera parte lib para ser descargado. Si solo desea excluir un uso específico, exclude.

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

o

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

Funciona. Y mi solución final es 'libraryDependencies ++ = Seq (...) mapa (_ excluir ("commons-logging", "commons-logging").)' – wks

+3

La documentación para esta está aquí:. Http: // www .scala-sbt.org/release/docs/detalladas de Temas/Biblioteca-Gestión # excluyen-transitivos dependencias –

+0

En realidad es '' ExclusionRule' y no ExclusionRules' – jeffreyveon

2

Añadir intransitivo su dependencia de la biblioteca tercera parte, por ejemplo,

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

downvoted, la causa puede llevar a los problemas cuando tienes más de una dependencia de terceros, como drexin señaló, lo siento. –

+0

Esta solución realmente funcionó para mí (eliminó todas las dependencias de terceros para 1 dependencia explícita). –

4

me encontré con el mismo problema antes. Resuelto mediante la adición de la dependencia como

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

o

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

Para SBT 0.13.8 y por encima, también puede probar la exclusión de dependencia a nivel de proyecto:

excludeDependencies += "commons-logging" % "commons-logging" 
Cuestiones relacionadas