java - 了解 gradle 依赖关系

标签 java gradle build.gradle

我有以下结构:

项目A -> 取决于项目B

ProjectB -> 取决于 ProjectC

编译projectB一切正常:

<小时/>

ProjectB/build.gradle:

dependencies {
  compile project(':ProjectC')
}
<小时/>

ProjectB/settings.gradle:

include ':ProjectC'
project(':ProjectC').projectDir = new File(settingsDir, '../ProjectC')
<小时/>

但是,编译ProjectA时却说找不到ProjectC

<小时/>

项目A/build.gradle:

dependencies {
  compile project(':ProjectB')
}
<小时/>

项目A/settings.gradle:

include ':ProjectB'
project(':ProjectB').projectDir = new File(settingsDir, '../ProjectB')
<小时/>

这将显示以下错误:

Where: Build file ProjectB\build.gradle

What went wrong:

A problem occurred evaluating project ':ProjectB'.

Project with path ':ProjectC' could not be found in project ':ProjectB'.

<小时/>

我只能让它工作,包括ProjectA中的ProjectC。但这不是我想要的。

我也尝试排除 ProjectA 但没有成功

项目A/build.gradle:

dependencies {
  compile (project (':ProjectB')) {
    exclude module: ':ProjectC'
  }
}

但显示相同的错误。

我该如何解决这个问题?

最佳答案

多项目构建不可级联。在多项目构建中可以有一个或没有 settings.gradle 文件,但不能有多个。

除了它没有按预期工作之外,如果您从不同的目录调用 Gradle,它甚至会变得更加困惑。如果未指定,Gradle 会查找(并在旁边查找名为 master 的目录)以查找最近的 settings.gradle。然后,它评估 settings.gradle 并检查您的工作目录所在的项目是否是该 settings.gradle 文件中定义的多项目构建的一部分。如果是,则在多项目构建的上下文中执行,如果不是,则作为独立构建执行。

这意味着,如果您从 ProjectA 内部调用 Gradle,则与从 ProjectB 内部调用 Gradle 相比,您将获得完全不同的构建,并且其配置也可能不同。

如果您想将多个多项目构建组合成一个构建,则应该使用 GradleBuild 任务或复合构建。在这两种情况下,子构建都是完全独立的,并且本身可以是多项目构建。使用哪一种取决于具体的用例。

关于java - 了解 gradle 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47547776/

相关文章:

java - 当尝试以相反的顺序读取两个标准时,为什么我的输出为空白?

java - java 中的关联和 HashMap

java - Android资源链接失败

java - 无法从 9.0.1 intellij (windows) 确定 java 版本

android-studio - Android Studio 1.5.1 Gradle错误:app:mergeDebugResources失败

android - 将 android 插件版本(gradle 版本)更新到 3.3.0 后无法解析符号 'R'

Java:调用 native 方法给出 "Exception in thread "main"java.lang.UnsatisfiedLinkError"

java - 等待事件发生的队列

tomcat - 如何用Jenkins部署多个SpringBoot环境?

react-native - Firebase - Gradle 构建失败 - com.google.android.gms :play-services-measurement-base