Как исключить транзитивные зависимости другого подпроекта в сборках мультипроектов?

В Build.scala У меня есть зависимость между проектами:

val coreLib = Projects.coreLib()
val consoleApp = Projects.consoleApp().dependsOn(coreLib)
val androidApp = Projects.androidProject().dependsOn(coreLib/*, exclusions = xpp */)

Основной проект библиотеки определяет библиотеку в своем libraryDependencies (синтаксическом анализаторе XPP), который я хочу исключить в androidApp, так как платформа Android имеет свою собственную реализацию XPP из коробки.

Как я могу исключить библиотеку XPP из транзитивных зависимостей coreLib в проекте androidApp?

EDIT:

Согласно моему исследованию исключение возможно ТОЛЬКО к ModuleID, которое используется в сочетании с libraryDependency. Между тем dependsOn помещает все транзитивные зависимости в classpath, в api нет способа исключить некоторые транзитивные зависимости этого проекта, вы dependsOn

ПОДРОБНОСТИ:

Сейчас я запускаю sbt 0.13.5.

libraryDependencies commonLib, а также различные настройки, предоставленные в build.sbt, чтобы этот проект можно было повторно использовать как автономный, и потому что он чувствует себя правильно и естественным способом предоставления настроек в sbt.

Ответы

Ответ 1

Это работает для меня:

val someApp = project.settings(
  libraryDependencies += "junit" % "junit" % "4.11"
)

val androidApp = project.dependsOn(someApp).settings(
  projectDependencies := {
    Seq(
      (projectID in someApp).value.exclude("junit", "junit")
    )
  }
)

Что делает projectDepenendencies, это то, что sbt, по умолчанию, пытается сделать. Он преобразует любые межпроектные зависимости в ModuleID, которые Ivy будет использовать во время разрешения. Поскольку API Project не имеет возможности указывать исключения в настоящее время, мы обходим этот автоматический слой и вручную объявляем также зависимость Ivy.

Результат:

> show someApp/update
...
[info] Update report:
...
[info]  compile:
[info]      org.scala-lang:scala-library:2.10.4 (): (Artifact(scala-library,jar,jar,None,List(),None,Map()),/home/jsuereth/.sbt/boot/scala-2.10.4/lib/scala-library.jar)
[info]      junit:junit:4.11: (Artifact(junit,jar,jar,None,ArraySeq(master),None,Map()),/home/jsuereth/.ivy2/cache/junit/junit/jars/junit-4.11.jar)
[info]      org.hamcrest:hamcrest-core:1.3: (Artifact(hamcrest-core,jar,jar,None,ArraySeq(master),None,Map()),/home/jsuereth/.ivy2/cache/org.hamcrest/hamcrest-core/jars/hamcrest-core-1.3.jar)
 ...

И зависимый проект с junit/hamcrest исключен:

> show androidApp/update
...
[info] Update report:
...
[info]  compile:
[info]      org.scala-lang:scala-library:2.10.4 (): (Artifact(scala-library,jar,jar,None,List(),None,Map()),/home/jsuereth/.sbt/boot/scala-2.10.4/lib/scala-library.jar)
[info]      someapp:someapp_2.10:0.1-SNAPSHOT: 
...