Я очень долго борюсь с этим, поэтому любая помощь будет оценена по достоинству.
У меня есть общая библиотека myCommonLib
, у которой есть зависимость, которую мне нужно затенять sbt-assembly
.
Когда я публикую его на своем локальном репозитории Ivy, я получаю 2 версии, «обычный» (как обычно) и затененный (со всеми связанными зависимостями), с добавлением «сборки», конечно.Sbt-assembly, Ivy, classpath
Проблема в том, что я использую свою «нормальную» зависимость, я получаю NoClassDefFoundError
, что относится к затененной версии !!!
Я попытался удалить его полностью из пути к классам, как это:
dependencyClasspath in Runtime := {
val allFiles: Seq[Attributed[File]] = (dependencyClasspath in Runtime).value
allFiles.filterNot(_.data.getName.toLowerCase.contains("-assembly"))
}
, но он не работает, все та же ошибка.
Однако, когда я удалить его (закомментировать) из XML Ivy это работа:
<artifact name="myCommonLib_2.11" type="jar" ext="jar" conf="compile,runtime,test,provided,optional,sources,docs,pom" e:classifier="assembly"/>
Что мне не хватает?
Спасибо, но [SBT документы] (http://www.scala-sbt.org/0.13/docs/Library-Management.html#E xclude + Transitive + Dependencies) говорят, что «Чтобы исключить определенные ** транзитивные зависимости ** зависимости, используйте методы excludeAll или exclude». Это не транзитивная зависимость, это часть самого модуля .. (Еще один артефакт в нем) –