何时使用 gradle.properties 与 settings.gradle?

     2023-02-26     213

关键词:

【中文标题】何时使用 gradle.properties 与 settings.gradle?【英文标题】:When to use gradle.properties vs. settings.gradle? 【发布时间】:2018-01-05 09:04:20 【问题描述】:

一个 gradle build 包含三个文件

build.gradle 定义构建配置脚本 gradle.properties settings.gradle

问题

settings.gradlegradle.properties 有什么区别? 什么时候应该在settings.gradle 中设置设置? gradle.properties?

【问题讨论】:

【参考方案1】:

一个多模块项目有一个主模块和许多子模块。它有这样的布局:

(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/gradlesrc/build/gradle

buildSrc/...

这个文件夹很特别,它本身就像一个单独的 gradle 项目。它是在做任何其他事情之前构建的,并且可以提供在任何其他 gradle 文件中使用的功能。 由于技术原因,IDE 对此文件夹的引用支持比从多个 build.gradle 文件中提取公共代码到单独位置的任何其他方式都要好得多。

您可以在 java、groovy 或 kotlin 中定义复杂的自定义构建逻辑,而不是编写和部署插件。这对于对自定义构建代码进行单元测试也很有用,因为您可以进行单元测试。 buildSrc 中的源文件夹结构可以像任何 java/groovy/kotlin 项目一样进行调整。

构建约定/...

当要共享的逻辑很简单(如版本号)时,此元素是可选的,可用作 buildSrc 的替代品,并且不一定会因为更改一个依赖项的一个版本而触发大型项目的完全重建。此目录的名称是任意的,但它需要包含在根 settings.gradle 中,如下所示:includeBuild 'build-conventions',它的 build.gradle 应该有 plugins id("groovy-gradle-plugin")

这允许提取.gradle files 中的构建逻辑,这些逻辑可以简单地包含在其他模块中,例如plugins id("myconvention")

这也可以与buildSrc 文件夹结合使用。

【讨论】:

【参考方案2】:

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 文件是一个简单的 Java Properties 文件,它仅通过自动包含在 Project 对象的范围内(即所谓的“项目属性”)而获得特殊作用。这是一个简单的键值存储,只允许字符串值(因此您需要自己拆分列表或数组)。您可以将gradle.properties 文件放到这些位置:

直接在项目目录中(用于项目相关值) 在用户主目录.gradle 中(用于与用户或环境相关的值)

【讨论】:

是否有可能有一个远程 gradle.properties 文件

】是否有可能有一个远程gradle.properties文件【英文标题】:Isitpossibletohavearemotegradle.propertiesfile【发布时间】:2020-03-1721:03:49【问题描述】:我想要一个远程gradle.properties(住在某处的服务器上),我可以将其拉入我的build.gradle并... 查看详情

【gradle深入浅出】——gradle配置(一)

...的配置。我们知道Gradle都关于属性配置有两个文件,local.properties和gradle.properties,这两个文件的实质都是生成Java的Properties对象,所以要属性这两个文件的作用,首先要属性下Properties类。我们首先来看下这个类的基本上结构。看... 查看详情

对 gradle.properties、settings.gradle、gradle-wrapper.properties 和 local.properties 有所了解

】对gradle.properties、settings.gradle、gradle-wrapper.properties和local.properties有所了解【英文标题】:Somelightongradle.properties,settings.gradle,gradle-wrapper.propertiesandlocal.properties【发布时间】:2018-07-1923:45:30【问题描述】:我在配置我的项目时经 查看详情

我应该把 gradle.properties 放在詹金斯的哪里

】我应该把gradle.properties放在詹金斯的哪里【英文标题】:WhereshouldIputgradle.propertiesinJenkins【发布时间】:2013-04-1616:26:02【问题描述】:我应该将gradle.properties文件放在Jenkins的什么位置?我使用的是1.21版的Gradle插件,但是当我将... 查看详情

如何从插件覆盖 Cordova 项目的 gradle.properties?

】如何从插件覆盖Cordova项目的gradle.properties?【英文标题】:Howtooverridegradle.propertiesofaCordovaprojectfromaplugin?【发布时间】:2021-04-2021:40:25【问题描述】:我正在为Android开发一个Cordova插件。它使用了几个依赖项,例如:com.android.to... 查看详情

在 gradle.properties 文件中使用“android.debug.obsoleteApi=true”时如何访问日志错误详细信息

】在gradle.properties文件中使用“android.debug.obsoleteApi=true”时如何访问日志错误详细信息【英文标题】:Howtoaccesslogerrordetailswhenusing\'android.debug.obsoleteApi=true\'ingradle.propertiesfile【发布时间】:2019-06-2916:27:04【问题描述】:我是为开... 查看详情

gradle与插件版本的对应关系(代码片段)

...指定Gradle版本,也可以通过在gradle/wrapper/gradle-wrapper.properties文件中修改Gradle分发引用来指定。File>ProjectStructure>Project在gradle-wrapper.properties文件中修改distributionUrl字段distributionUrl=https://services.gradle.org/distributions/gradle-7.3... 查看详情

如何在 git-ignore 文件 android 中添加 gradle.properties? [复制]

】如何在git-ignore文件android中添加gradle.properties?[复制]【英文标题】:Howtoaddgradle.propertiesingit-ignorefileandroid?[duplicate]【发布时间】:2018-11-2903:04:32【问题描述】:我正在尝试像休息一样添加gradle.properties,但仍然会更改文件更改... 查看详情

Jenkins Artifactory 插件(gradle)不从 gradle.properties 读取版本

】JenkinsArtifactory插件(gradle)不从gradle.properties读取版本【英文标题】:JenkinsArtifactoryPlugin(gradle)doesn\'treadversionfromgradle.properties【发布时间】:2016-12-2611:09:13【问题描述】:目前我尝试配置Jenkins,因此我可以自动进行发布构建。... 查看详情

使用自定义属性文件

】使用自定义属性文件【英文标题】:Useacustompropertiesfile【发布时间】:2013-06-2613:16:36【问题描述】:我想要一个与我的应用程序一起部署的属性文件,以便我可以在运行时访问它。如何让我的build.gradle文件访问位于src/main/resour... 查看详情

在 gradle.properties 文件中声明数组/哈希图

】在gradle.properties文件中声明数组/哈希图【英文标题】:Declarearray/hashmapingradle.propertiesfile【发布时间】:2014-12-1917:38:22【问题描述】:我正在尝试在gradle.properties文件中定义一个数组。例如,当我在某个gradle脚本中执行下一个操... 查看详情

gradle签名的配置文件gradle.properties

参考技术A在对包进行签名之前,需要在gradle.properties配置文件中添加一些参数。参数的内容如下:signing.keyId=YourKeyIdsigning.password=YourPublicKeyPasswordsigning.secretKeyRingFile=PathToYourKeyRingFileossrhUsername=your-jira-idossrhPassword=your-jira-passwordsigni... 查看详情

何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?

】何时使用.First以及何时将.FirstOrDefault与LINQ一起使用?【英文标题】:Whentouse.Firstandwhentouse.FirstOrDefaultwithLINQ?【发布时间】:2010-11-0416:54:19【问题描述】:我四处搜索,并没有真正找到一个明确的答案,即您何时想要使用.First... 查看详情

Android Studio - Gradle 设置

...tudio新手,我从Github构建了一个项目,其中包含一个gradle.properties文件。如果我将鼠标悬停在“org.gradle.jvmargs=[...]”上,它会显示“未使用的属性”。gradle.properties中的评 查看详情

androidstudio详细的插件与gradle的关系(建议收藏)(代码片段)

插件,在app的build.gradle中一句:classpath\'com.android.tools.build:gradle:X.X.X\'Gradle,在gradle的wrapper的gradle-wrapper.properties中一句:distributionUrl=https\\://services.gradle.org/distributions/gradle-xxx.zip插 查看详情

gradle安装与idea配置(代码片段)

...gradle版本。在咱们的gradle缓存.gradle目录下创建一个gradle.properties文件 ,再打开该文件在其中添加如下语句,可以提高编译速度。#开启线程守护,第一次编译时开线程,之后就不会再开了org.gradle.daemon=true#配置编译时的虚拟机... 查看详情

何时使用 json 以及何时使用 jsonp 与 jquery $.ajax?

】何时使用json以及何时使用jsonp与jquery$.ajax?【英文标题】:Whentousejsonandwhenjsonpwithjquery$.ajax?【发布时间】:2012-05-0521:51:35【问题描述】:在我们的网站中,有些页面是SSL,有些是非SSL。例如:http://www.example.com/search/patientshttps:/... 查看详情

androidstudio如何快速改插件与gradle的版本号

...与Gradle的版本号:Project的build.gradle:gradle-wrapper.properties:怎么快速改插件与Gradle的版本号,我想改:插件版本号4.2.0改7.2.0,Gradle版本号6.7.1改7.3.3先看一下插件版本说明,插件版本对应Gradle版本快速改 查看详情