具有相对配置的多级Gradle项目

时间:2015-04-08 06:10:11

标签: java android gradle build.gradle

是否可以在gradle中设置项目树,以便每个子树独立构建?

在示例目录(项目)结构中:

A
+  B1
   +  C1
   +  C2
+  B2
   +  C4
   +  C5

您应该能够自己构建B1(将构建C1和C2)以及A(将构建所有7个项目)

问题1:A忽略B1配置

A / B1 / setting.gradle:

include "C1", "C2"

在A中,执行“gradle projects”命令将显示B1但不显示C1或C2。

问题2:相对依赖

如果C1依赖于C2,则指定此值的唯一方法是绝对路径。这意味着它适用于A或B1,但不适用于两者:

project(':B1:C2') // works for B1 but not for A
or
project(':A:B1:C2') // works for A but not for B1

这个目录结构是否可行,我可以单独构建A,B1和B2?

1 个答案:

答案 0 :(得分:1)

AFAIK在根项目中只能有一个settings.gradle,并且没有办法将分层项目分组到子组中。

您可以在settings.gradle中使用多个级别:

include "b1",
        "b1:c1",
        "b1:c2",
        "b2",
        "b2:c4",
        "b2:c5"

如果你在root中执行gradle,这将构建所有项目,但是如果你在b1中执行它,它将不会只构建b1,c1和c2。

我不确定你想在这里完成什么,但也许任务依赖可以解决你之后的问题:

B1 /的build.gradle:

tasks.jar.dependsOn += [
    project(":b1:c1").tasks.jar,
    project(":b1:c2").tasks.jar
]

运行jar任务:

$ gradle -p b1 jar
:b1:compileJava UP-TO-DATE
:b1:processResources UP-TO-DATE
:b1:classes UP-TO-DATE
:b1:c1:compileJava UP-TO-DATE
:b1:c1:processResources UP-TO-DATE
:b1:c1:classes UP-TO-DATE
:b1:c1:jar
:b1:c2:compileJava UP-TO-DATE
:b1:c2:processResources UP-TO-DATE
:b1:c2:classes UP-TO-DATE
:b1:c2:jar
:b1:jar

BUILD SUCCESSFUL

Total time: 0.761 secs