一个gradle版本有三个文件
- 定义生成配置脚本的
build.gradle
gradle.properties
settings.gradle
问题
settings.gradle
&gradle.properties
有什么区别?- 何时应将设置放入
settings.gradle
与gradle.properties
?
settings.gradle
settings.gradle
文件是一个Groovy脚本,就像build.gradle
文件一样。每个生成中只会执行一个settings.gradle
脚本(与多项目生成中的多个build.gradle
脚本相比(。settings.gradle
脚本将在任何build.gradle
脚本之前执行,甚至在创建Project
实例之前执行。因此,它是根据Settings
对象进行评估的。使用此Settings
对象,您可以将子项目添加到构建中,从命令行修改参数 (StartParameter
(,以及访问Gradle
对象以注册生命周期处理程序。因此,如果您的设置与生成相关,不一定与项目相关,或者在包含可能的子项目之前需要逻辑,请使用settings.gradle
。
gradle.properties
gradle.properties
文件是一个简单的 JavaProperties
文件,只有通过自动包含在Project
对象的作用域(如所谓的"项目属性"(中,它才能获得特殊角色。这是一个简单的键值存储,只允许字符串值(因此您需要自己拆分列表或数组(。您可以将gradle.properties
文件放在以下位置:
- 直接在项目目录中(对于与项目相关的值(
- 在用户主页
.gradle
目录中(用于与用户或环境相关的值(
多模块项目有一个主模块和许多子模块。它具有以下布局:
(root)
+- settings.gradle
+- build.gradle # optional (commonly present)
+- gradle.properties # optional
+-- buildSrc/ # optional
| +- build.gradle
| +-- src/...
+-- build-conventions/ # optional
| +- settings.gradle # empty
| +- build.gradle
| +-- src/
| +-- myconvention.gradle
+-- my-gradle-stuff/ # optional
| +- utils.gradle # optional
+-- sub-a/
| +- build.gradle
| +- src/
+-- sub-b/
+- build.gradle
+- src/
子模块也可以位于子文件夹的更深处,但不修改 settings.gradle 中的代码,它们的名称将包含此类文件夹的名称。
settings.gradle
settings.gradle 的主要作用是定义所有包含的子模块并标记模块树的目录根目录,因此在多模块项目中只能有一个settings.gradle
文件。
rootProject.name = 'project-x'
include 'sub-a', 'sub-b'
设置文件也是用 groovy 编写的,子模块查找可以自定义。
build.gradle
每个模块都有一个这样的文件,它包含此模块的构建逻辑。
在主模块的build.gradle
文件中,可以使用allprojects {}
或subprojects {}
来定义所有其他模块的设置。
在子模块的build.gradle
文件中,可以使用compile project(':sub-a')
使一个子模块依赖于另一个子模块。
gradle.properties
这是可选的,其主要目的是提供用于运行 gradle 本身的启动选项,例如
org.gradle.jvmargs=-Xmx=... -Dfile.encoding=UTF-8 ...
org.gradle.configureondemand=true
这些值可以被文件USER_HOME/.gradle/gradle.properties
覆盖,也可以由 gradle 命令行参数覆盖。此外,还可以使用systemProp.
作为前缀在此文件中为构建设置环境变量。
此文件中的任何属性都可以在任何build.gradle中使用,因此某些项目也将依赖项版本或发布信息放在gradle.properties
中,但这很可能是对该文件的滥用。
my-gradle-stuff/utils.gradle
(文件夹或文件的任何名称都是可能的。 您可以定义其他自定义 gradle 文件以重复使用定义,并通过以下方式将它们包含在其他 gradle 文件中
apply from: "$rootDir/gradle/utils.gradle"
其他放置位置可能是src/gradle
或src/build/gradle
构建源/...
这个文件夹很特别,它本身就像一个单独的 gradle 项目。它是在执行其他任何操作之前构建的,并且可以提供在任何其他gradle文件中使用的功能。由于技术原因,IDE 对此文件夹的引用的支持比将公共代码从多个build.gradle
文件提取到单独位置的任何其他方法都要好得多。
您可以在java,groovy或kotlin中定义复杂的自定义构建逻辑,而不是编写和部署插件。这对于对自定义生成代码进行单元测试也很有用,因为您可以进行单元测试。buildSrc
中的源文件夹结构可以像任何java/groovy/kotlin项目一样进行调整。
构建约定/...
此元素是可选的,当要共享的逻辑很简单(如版本号(时,此元素用作 buildSrc 的替代品,并且不一定会为了仅更改一个依赖项的一个版本而触发大型项目的完全重建。这个目录的名称是任意的,但是它需要包含在根设置.gradle中,如下所示:includeBuild 'build-conventions'
,它的build.gradle应该有plugins {id("groovy-gradle-plugin")}
。
然后,这允许在.gradle files
中提取构建逻辑,这些逻辑可以简单地包含在其他模块中,例如plugins {id("myconvention")}
。
这也可以与buildSrc
文件夹结合使用。