在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实现。
如何从项目的传递依赖项coreLib
中排除XPP库androidApp
?
编辑:
根据我的研究,仅与ModuleID
结合使用是不可能的libraryDependency
。同时dependsOn
将所有可传递依赖项都放到classpath中,api中没有办法排除该项目的某些可传递依赖项,您dependsOn
细节:
我目前正在运行sbt 0.13.5。
libraryDependencies
,以及build.sbt中提供的各种设置,因此该项目可以作为独立的项目重复使用,并且因为感觉使用正确和自然的方式在中提供设置sbt
。
这似乎为我工作:
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在解析期间将使用的依赖项。由于Project
API当前无法指定排除对象,因此我们绕过此自动层,并手动声明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:
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句