我有一个包含 4 个项目的扁平项目层次结构。我们称它们为 B、C、D、M,它们具有以下线性依赖关系:
B -> C -> M -> D
-> =“取决于”
项目 B、C 和 M 有一个 build.gradle 和 settings.gradle。 settings.gradle 始终对所有依赖项目执行 includeFlat。如果是 B,则为 includeFlat('D', 'M', 'C')。 build.gradle 定义始终定义对其所依赖的项目的依赖关系。如果是 B,则为编译项目('C')。
如果我尝试构建项目 B,我会遇到这样的问题:解析 B 后,gradle 尝试解析 C 的 build.gradle 并失败,因为它找不到 M。
* What went wrong:
A problem occurred evaluating project ':C'.
> Project with path 'M' could not be found in project ':C'.
我认为调试输出的相关部分是:
Included projects: [root project 'B', project ':C', project ':D', project ':M']
尽管在其他 settings.gradle 文件和 build.gradle 依赖项中定义了内容,gradle 似乎还是按字母顺序对包含内容进行排序。
当我创建 C 时,我也想知道为什么需要将 D 包含到 includeFlat 设置中。但它在那里起作用,因为它订购了 D,M 的包含内容。
我目前看到的唯一“解决方案”是我删除 B 中的项目依赖项并依赖于 C 的构建 jar。但这有一个巨大的(破坏游戏的)缺点,即当我更改 D 中的某些内容时,我需要一个完整的构建、发布和“从关系中刷新”循环,直到更改可见。由于 C、M 和 D 仍处于积极开发阶段,因此这不是一个选择。
要解决这个问题,我需要告诉 eclipse 插件,当它发现一个 jar 依赖项也是一个项目时,它将项目依赖项添加到类路径而不是 jar 依赖项。
最佳答案
您似乎对 Gradle 多项目构建的工作方式有一些误解。以下是一些可能有助于您了解正在发生的情况的事实:
- Gradle 构建只能有一个
settings.gradle
。 settings.gradle
中include
语句的顺序无关。- 执行依赖关系始终存在于任务之间,而不是项目之间。例如,取决于
project(":M")
是取决于该项目的default
配置的简写。 Gradle 将此转换为对 M 中负责构建其默认配置的工件的依赖关系。请注意,依赖于项目并不意味着该项目中的所有任务都将在依赖项目中的任何任务之前运行。 - 多项目构建具有逻辑项目层次结构。
":M"
是绝对项目路径(:
表示根项目),而"M"
是相对项目路径。相对路径被解释为相对于当前项目。
为了更深入地了解多项目构建,我建议学习Gradle User Guide中的“多项目构建”章节。 ,以及完整 Gradle 发行版中的多项目构建示例。
关于java - 未找到传递项目依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967282/