2012-06-09 4 views
37

В моем проекте scala/sbt используется grizzled-slf4j и logback. Сторонняя зависимость использует Apache Commons Logging.Как исключить общедоступные записи из проекта scala/sbt/slf4j?

С Java/Maven я бы использовал jcl-over-slf4j и logback-classic, чтобы использовать logback как единый бэкэнд ведения журнала.

Я хотел бы также устранить зависимость Обще-протоколирования, что третья сторона Lib бы позволить SBT тянуть я сделать следующее в Maven (который рекомендован 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> 

И вопрос , как сделать то же самое с sbt?

ответ

55

Подход Хайко вероятно, будет работать, но приведет ни к одной из зависимостей 3 партии Lib для загрузки. Если вы хотите исключить только один, используйте exclude.

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

или

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

Это работает. И мое окончательное решение - 'libraryDependencies ++ = Seq (...). Map (_. Exclude (" commons-logging "," commons-logging "))' – wks

+3

Документация для этого здесь: http: // www .scala-sbt.org/release/docs/Подробные темы/Library-Management # exclude-transitive-dependencies –

+0

Это фактически 'ИсключениеRule', а не' ExclusionRules' – jeffreyveon

2

Добавить непереходный зависимость вашей сторонней библиотеки, например.

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

Downvoted, причиной может приводят к проблемам, когда у вас есть несколько зависимостей третьей стороны, как отметил дрексин, извините. –

+0

Это решение действительно сработало для меня (удалены все зависимые от сторонних сторон зависимости для 1 явной зависимости). –

4

я не встречал с той же проблемой. Решено, добавив зависимость как

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

или

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

Для SBT 0.13.8 и выше, вы также можете попробовать исключение зависимостей на уровне проекта:

excludeDependencies += "commons-logging" % "commons-logging" 
Смежные вопросы