gpt4 book ai didi

gradle - 可以相互继承多少个gradle文件?子项目可以是 "deep"吗?

转载 作者:行者123 更新时间:2023-12-03 04:59:55 25 4
gpt4 key购买 nike

我有一个具有以下结构的项目:

Root project 'ExampleProject'
+--- Project ':client'
| +--- Project ':client:android'
| +--- Project ':client:core'
| +--- Project ':client:desktop'
| +--- Project ':client:html'
| \--- Project ':client:ios'
+--- Project ':common'
+--- Project ':editor'
\--- Project ':server'

有一个 settings.gradle 像这样:
include ":client", ":common", ":editor", ":server",
"client:desktop", ':client:android', ':client:ios',
':client:html', ':client:core'
rootProject.name = "ExampleProject"

每个级别都有 build.gradle 文件。有一个在项目根目录,一个在客户端根目录,一个在客户端:android 根目录,等等。

看来 client:android 没有从 build.gradle 为 :client 项目继承插件等。最多可以“链接”和继承多少个 build.gradle 文件(2 个?)?

客户端 build.gradle 有一个这样的 block ,它没有被继承:
project(":client:android") {  //plugins and dependencies here 
}

最佳答案

除了根项目和所有其他模块之外,gradle 中没有特殊的父子关系。这意味着没有子项目的核心概念,它也是它自己的子项目的“父”。在这方面,文档似乎有点误导。它说:“在一个项目中声明的属性和方法被继承到它的所有子项目。”但我认为这真的只与根 build.gradle 和所有其他有关,它不是递归的。也许这已经回答了你的问题。

为什么不需要继承

通常也不希望有任何这样的概念,因为 gradle 试图通过模块化和增量来尽可能快。所以build.gradle文件应该是自给自足的,不需要任何父运行(除了根 build.gradle)。这是与 Maven 的根本区别,Maven 严重依赖继承来避免重复 XML 代码。

因此,虽然您可以编写自定义 gradle 代码来实现这种继承,但您可能不应该这样做。而不是共享 gradle 代码,您应该更喜欢组合( apply from ),在 buildSrc 中添加自定义代码/自定义插件文件夹,或在根目录 build.gradle 中定义子模块组文件。

这种项目设置的解决方法

所以几个 gradle 项目会做的是在根目录 build.gradle 中定义所有子项目组及其配置。像这样的文件:

def clientProjects() {
return subprojects.findAll {
// some predicate that is true only for client projects
}
}

configure(clientProjects()) {
apply plugin: ...
}

关于gradle - 可以相互继承多少个gradle文件?子项目可以是 "deep"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48087131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com