Технически это можно сделать, причем несколькими способами. Например, вы можете добавить в свой sbt:
libraryDependencies ++= Seq(
"org.apache" %% "dependecy-name" % "version" exclude("org.slf4j","slf4j-log4j12")
"org.slf4j" %% "slf4j-log4j12" % "other-version"
)
Эти строки укажут SBT не добавлять slf4j-log4j12, как это требуется dependecy-name
, и позже он будет получен в other-version
.
Сказав это, мы должны понимать риск, связанный с этим. Обычно, когда библиотека добавляет зависимость, она использует ее функции в определенной версии. Когда вы решите переопределить версию этой зависимости, возможно, что ваш код не будет компилироваться или, что еще хуже, он будет работать и приведет к другим результатам, чем вы ожидаете. Если вы уверены, что две версии имеют одинаковую функциональность, вы можете это сделать.
Обновление: чтобы удалить зависимость, вы можете добавить в свой build.sbt
:
libraryDependencies ~= { _ map {
case m if m.organization.contains("org") =>
m.exclude("log4j", "log4j")
case f => f
}}
Это будет go по всем вашим зависимостям, и каждая из них, которая содержит org
в своей организации, будет исключать log4j. Обратите внимание, что это будет иметь силу только для зависимостей верхнего уровня в вашем libraryDependencies
.