java - 具有相关配置的多级 Gradle 项目

标签 java android gradle build.gradle

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

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

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

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

问题一: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?

最佳答案

据我所知,您在根项目中只能有一个 settings.gradle,并且无法将分层项目分组到子组中。

虽然你可以在 settings.gradle 中有多个级别:

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

如果您在根目录下执行 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

关于java - 具有相关配置的多级 Gradle 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507216/

相关文章:

android - ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent )

java - 如何从命令行在 Java Gradle 项目中运行 main 方法?

gradle - 是否可以从doLast内部执行任务?

java - 使用 Sphinx4 将单词转换为语音发音

java - 如何对依赖于随机生成的数字的代码进行单元测试?

java - java中这两个对象初始化有什么区别?

java - 电子配置逻辑

java - 如何从 firebase 实时数据库检索列表?

java - 如何消除 Y 轴(MPAndroidChart)中的重复数字?

java - 来自 block API "Jar"部分的 gradle java 插件 "from"任务