是否可以设置超过2级的gradle项目?

Jul*_*cia 29 gradle

我们已经使用gradle大约一年了,并且已经取得了一些成功.许多功能仍然有点不透明,但我们正在实现这一目标.我不确定我是否正确解决问题,所以我会继续提问:

我在gradle中看到的所有示例都有一个根项目和一个子项目.出于多种原因,我们想巩固我们的git项目.所有这些都是gradle项目,其中一些项目有gradle子项目.我们最终想要的是一个多层次的gradle结构.我们不希望改变所有这些项目的gradle设置,而是希望拥有一个管理所有项目和相应子项目的顶级gradle.我的第一次尝试表明,我无法拥有一个控制build.gradle来编排所有项目和子项目.难道我做错了什么?我是否遵循并固有地打破了范式?

这是我想要做的示例结构:

Top Project
  build.gradle
  Project
    build.gradle
    Sub Project
      build.gradle
      src
    Sub Project
      ...
  Project
    ...
Run Code Online (Sandbox Code Playgroud)

谢谢,我希望我没有错过文档中的一些明显的解释.

erd*_*rdi 16

我只需将以下内容放在TopProject/settings.gradle中:

include 'Project1:SubProject1'
include 'Project1:SubProject2'
include 'Project2:SubProject1'
...
Run Code Online (Sandbox Code Playgroud)

您当前拥有的项目所需的唯一更改是从中删除settings.gradle文件,因为每个项目结构只能有一个setting.gradle文件.


Sam*_*Sam 12

我遇到了类似的问题.最简单的解决方案是通过在$ root/settings.gradle文件中添加项目来配置gradle,类似于Erdi的答案.但是,我设法自动添加所有子项目.逻辑将简单地遍历我的目录结构并查找包含的所有目录build.gradle并将它们添加为子项目.

这是怎么做的:

  • 确保settings.gradle除了根目录之外没有其他任何东西
  • root settings.gradle文件的内容应该是:
fileTree('.') {
  include '**/build.gradle'
  exclude 'build.gradle' // Exclude the root build file.
}.collect { relativePath(it.parent).replace(File.separator, ':') }
 .each { include(it) }
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.