android - sangria - vincular tareas en project
¿Cómo excluir dependencias transitivas de otros subproyectos en construcciones de multiproyectos? (1)
En Build.scala
tengo una dependencia entre proyectos:
val coreLib = Projects.coreLib()
val consoleApp = Projects.consoleApp().dependsOn(coreLib)
val androidApp = Projects.androidProject().dependsOn(coreLib/*, exclusions = xpp */)
El proyecto de la biblioteca principal define una biblioteca en su libraryDependencies
Dependencias (analizador XPP), que quiero excluir en androidApp
, ya que Android Framework tiene su propia implementación XPP fuera de la caja.
¿Cómo puedo excluir la biblioteca XPP de las dependencias transitivas de coreLib
en el proyecto androidApp
?
EDITAR:
Según mi investigación, la exclusión es posible SOLAMENTE para ModuleID
que se utiliza junto con libraryDependency
. Mientras tanto, dependsOn
pone todas las dependencias transitivas en classpath, no hay forma en la API de excluir algunas dependencias transitivas de este proyecto, usted dependsOn
DETALLES:
Estoy corriendo sbt 0.13.5 actualmente.
libraryDependencies
de commonLib, así como varias configuraciones proporcionadas en build.sbt para que este proyecto pueda ser reutilizado como independiente, y porque se siente como una forma correcta y natural de suministrar configuraciones en sbt
.
Esto parece funcionar para mí:
val someApp = project.settings(
libraryDependencies += "junit" % "junit" % "4.11"
)
val androidApp = project.dependsOn(someApp).settings(
projectDependencies := {
Seq(
(projectID in someApp).value.exclude("junit", "junit")
)
}
)
Lo que está haciendo el proyecto Dependencias es lo que sbt, por defecto, intenta hacer. Convierte las dependencias entre proyectos en ModuleID
que Ivy utilizará durante la resolución. Debido a que la API del Project
no tiene forma de especificar las exclusiones actualmente, omitimos esta capa automática y también declaramos manualmente la dependencia de Ivy.
Resultado:
> 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)
...
Y el proyecto dependiente con junit / hamcrest excluido:
> 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:
...