Как исключить запись общедоступных ресурсов из проекта scala/sbt/slf4j?
В моем проекте scala/sbt используется grizzled-slf4j и logback. Сторонняя зависимость использует запись в Apache Commons.
С 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?
Ответы
Ответ 1
Подход Heiko, вероятно, будет работать, но не приведет к загрузке ни одной из зависимостей сторонней библиотеки lib. Если вы хотите исключить только один, используйте exclude
.
libraryDependencies += "foo" % "bar" % "0.7.0" exclude("org.baz", "bam")
или
... excludeAll( ExclusionRule(organization = "org.baz") ) // does not work with generated poms!
Ответ 2
Для sbt 0.13.8 и выше вы также можете попробовать исключение зависимостей на уровне проекта:
excludeDependencies += "commons-logging" % "commons-logging"
Ответ 3
Я встретил ту же проблему раньше. Решила его, добавив зависимость, например
libraryDependencies += "foo" % "bar" % "0.7.0" exclude("commons-logging","commons-logging")
или
libraryDependencies += "foo" % "bar" % "0.7.0" excludeAll(ExclusionRule(organization = "commons-logging"))
Ответ 4
Добавьте непереходную зависимость вашей сторонней библиотеки, например.
libraryDependencies += "foo" %% "bar" % "1.2.3" intransitive