Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在多项目构建中排除其他子项目的可传递依赖关系?_Android_Scala_Sbt_Sbt 0.13 - Fatal编程技术网

Android 如何在多项目构建中排除其他子项目的可传递依赖关系?

Android 如何在多项目构建中排除其他子项目的可传递依赖关系?,android,scala,sbt,sbt-0.13,Android,Scala,Sbt,Sbt 0.13,在Build.scala中,项目之间存在依赖关系: val coreLib = Projects.coreLib() val consoleApp = Projects.consoleApp().dependsOn(coreLib) val androidApp = Projects.androidProject().dependsOn(coreLib/*, exclusions = xpp */) 核心库项目在它的libraryDependencies(XPP解析器)中定义了一个库,我想在a

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实现

如何从
androidApp
项目中的
coreLib
的可传递依赖项中排除XPP库

编辑:

根据我的研究,只有
ModuleID
libraryDependency
一起使用时才可能排除。同时
dependsOn
将所有可传递的依赖项放在类路径中,api中无法排除该项目的一些可传递依赖项,您
dependsOn

详情:

我目前正在运行sbt 0.13.5


commonLib的
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")
    )
  }
)
ProjectDependencies正在做的是sbt在默认情况下试图做的事情。它将任何项目间的依赖关系转换为
ModuleID
s,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: 
...

这似乎是一个有效的解决方案。请注意,如果您不想对scala库执行相同的操作,请在其模块名称(排除方法的第二个参数)中提供scala库版本后缀(
\u 2.10
东西)。这应该在SBT文档中。确认这也适用于SBT 0.13.7。尝试此操作时,我收到以下错误:错误:未找到:值projectId@autodidacticon,它应该是
projectID
而不是
projectID
。它在
sbt.Keys.projectID下定义