我有一个包含 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')。
如果我尝试构建项目BI遇到解析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 似乎按字母顺序对包含进行排序。
当我创建 CI 时也想知道为什么我需要将 D 包含到 includeFlat 设置中。但它在那里工作,因为它将包含订购到 D,M。
我目前看到的唯一“解决方案”是我删除了 B 中的项目依赖项并依赖于 C 的构建 jar。但这有一个巨大的(游戏破坏)缺点,即当我在 DI 中更改某些内容时需要完整构建,发布和“从关系刷新”循环直到变化可见。因为 C、M 和 D 仍在积极开发中,所以这不是一个选择。
为了解决这个问题,我需要告诉 eclipse 插件,当它发现一个 jar 依赖项也是一个项目时,它会将项目依赖项添加到类路径而不是 jar 依赖项。