2017-01-04 17 views
0

Я очень долго борюсь с этим, поэтому любая помощь будет оценена по достоинству.
У меня есть общая библиотека 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"/> 

Что мне не хватает?

ответ

0

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

val myCommonLibArtifact = Artifact(
    name="myCommonLib", `type`="jar", extension="jar", classifier=None, 
    configurations=Seq(Compile), url=None, extraAttributes=Map()) 

libraryDependencies ++= Seq(
    "ba.sake" %% "myCommonLib" % "0.0.1" artifacts (myCommonLibArtifact)  
) 
0

Вы можете исключить его в сборке SBT, делая это

libraryDependencies ++= Seq(
    "some" % "myCommonLib" % "1.0" excludeAll(
     ExclusionRule(organization = "yourOrganisation", name = "dependency name"), 
     ... 
) 

Здесь необходимая документация: http://www.scala-sbt.org/0.12.2/api/sbt/ExclusionRule.html

+0

Спасибо, но [SBT документы] (http://www.scala-sbt.org/0.13/docs/Library-Management.html#E xclude + Transitive + Dependencies) говорят, что «Чтобы исключить определенные ** транзитивные зависимости ** зависимости, используйте методы excludeAll или exclude». Это не транзитивная зависимость, это часть самого модуля .. (Еще один артефакт в нем) –