Gradle 基础学习(九) 认识Gradle属性和构建环境配置

Gradle提供了多种机制给开发者来配置Gradle自身的行为和具体项目的行为。

以下是使用这些机制的一些参考。

Mechanism

Information

Example

Command line interface

命令行接口,用于动态配置构建行为和Gradle功能

--rerun

Project properties

特定于Gradle 项目的属性

TestFilter::isFailOnNoMatchingTests=false

System properties

系统属性,用于传递给Gradle运行时(JVM)

systemProp.http.proxyHost=somehost.org

Gradle properties

Gradle属性,用于配置如何执行Gradle构建

org.gradle.caching=true

Environment variables

系统环境变量,通过环境变量来传递属性给Gradle和JVM,从而配置构建行为

JAVA_HOME

配置优先级

当我们通过上述方法配置Gradle行为时,必须考虑他们的优先级。

下面这个表格按照优先级从高到低排列了这些方法(优先级最高的优先被应用):

Priority

Method

Location

Example

Details

1

Command-line flags

命令行

--build-cache

这里的选项会覆盖属性和环境变量

2

System properties

项目根目录

systemProp.http.proxyPort=443

定义在gradle.properties文件里

3

Gradle properties

GRADLE_USER_HOME
Project Root Dir
GRADLE_HOME

org.gradle.logging.level=quiet

定义在gradle.properties文件里

4

Environment variables

环境变量

GRADLE_OPTS

Sourced by the environment that executes Gradle.

项目属性(Project Properties)

项目属性是特定于 Gradle 项目的,并且可以在构建脚本中的定义块(blocks)里或直接在Project对象上进行定义。

比如在build.gradle中定义一个名为myProperty的项目属性:

ext {

    myProperty = findProperty('myProperty') ?: 'Hello, world!'

}

println "My property value: ${project.ext.myProperty}"

//或者

println "My property value: ${myProperty}"

在 Gradle 中,ext 是一个特殊的命名空间,一旦在其中定义了一个额外属性,就可以在拥有它的对象(在下面的例子中分别是Project、Task和子项目)上直接读取和更新它。 

我们有两种方式用于添加项目属性,按照优先级从高到低排序。

1.命令行: 通过-P命令行选项添加属性到Project对象。

$ ./gradlew build -PmyProperty='Hi, world'

2.系统属性或环境变量: 使用特殊命名约定的系统属性或环境变量设置项目属性。 

$ ./gradlew build -Dorg.gradle.project.myProperty='Hi, world'

如果某个系统属性名称看起来像org.gradle.project.prop=someValue,Gradle 就会自动将 prop 作为一个属性添加到你的Project对象上,并赋值为 someValue 。

Gradle也支持将环境变量作为属性添加到Project对象上,只是有不同的命名约定,看起来像 ORG_GRADLE_PROJECT_prop=someValue。

下面的例子演示了如何设置Project对象上的foo属性的值为bar:

使用命令行行选项

$ ./gradlew build -Pfoo=bar

$ ./gradlew build -Dorg.gradle.project.foo=bar

 在gradle.properties文件中设置系统属性

org.gradle.project.foo=bar

使用环境变量 

export ORG_GRADLE_PROJECT_foo=bar 

当您没有持续集成服务器的管理权限并且需要设置不容易看到的属性值时,这个功能非常有用。由于在该场景中不能使用-P选项,也不能更改系统级配置文件,因此正确的策略是更改持续集成构建作业的配置,添加与预期模式匹配的环境变量设置。这对系统上的普通用户来说是不可见的。

在构建脚本中可以通过直接使用名称来访问项目属性,就像使用变量一样。

命令行接口(Command-Line Interface)

在之前的学习中介绍了相关知识,有兴趣可以去看看。 大部分的命令行标志可以在gradle.properties文件中指定,所以命令行标志并不是必须的。

Gradle属性(Gradle properties)

Gradle提供了多种选项使得我们可以更容易地配置执行构建的Java进程,尽管可以通过GRADLE_OPTS 或 JAVA_OPTS在本地环境中配置这些值,但将某些设置(如JVM内存配置和JAVA_HOME位置)存储在版本控制中,以确保整个团队都能使用一致的环境,这是非常有用的。

比如在gradle.properties文件中添加这些设置:

org.gradle.caching.debug=false

Gradle 在处理配置时,会综合考虑通过命令行设置的 Gradle 属性和 gradle.properties 文件中的设置。当同一个选项在多个位置被配置时,Gradle 会按照下面的优先级顺序来确定哪个配置会被采用,并且第一个被找到的配置会“获胜”。

Priority

Method

Location

Details

1

Command line interface

.

在命令行中使用-D设置

2

gradle.properties file

GRADLE_USER_HOME

 GRADLE_USER_HOME目录下gradle.properties文件中存储的设置

3

gradle.properties file

Project Root Dir

一个项目目录下gradle.properties文件中存储的设置,然后是父项目目录,一直到项目的根目录下的gradle.properties文件中的设置

注意这里本身也有一个优先级从高到低的顺序

4

gradle.properties file

GRADLE_HOME

 GRADLE_HOME目录下gradle.properties文件中存储的设置, GRADLE_HOME是一个可选的用来指定Gradle安装目录的环境变量,只有正确设置了才有效。

 注意:GRADLE USER HOME的位置可能已经事先通过-Dgradle.user.home修改了。

下面这些是常见的Gradle属性:

org.gradle.caching=(true,false)

当设置为true,启用构建缓存,Gradle检测到任务的输出已经在构建缓存中时,会直接从缓存中加载。

默认是false

org.gradle.caching.debug=(true,false)

当设置为true,启用构建缓存的调试日志,Gradle 会在控制台记录每个任务的输入属性哈希值和构建缓存键。

默认是false

org.gradle.configuration-cache

启用配置缓存, Gradle会尝试重用之前构建的配置,从而加快配置阶段的速度。

默认是false

org.gradle.configureondemand=(true,false)

当设置为true,启用按需配置功能,Gradle 只会尝试配置必要的项目。

默认是false

org.gradle.console=(auto,plain,rich,verbose)

自定义控制台输出的颜色或详细程度

默认值取决于 Gradle 的调用方式。

org.gradle.continue=(true,false)

如果启用,即使在一个任务失败后也会继续执行后续任务;如果禁用,任务失败就停止。

默认是false

org.gradle.daemon=(true,false)

当设置为true,使用Gradle 守护进程(Daemon)来执行构建。

默认是true。

org.gradle.daemon.idletimeout=(# of idle millis)

设置 Gradle 守护进程在空闲状态下等待多少毫秒后自动终止。

默认是3小时。

org.gradle.debug=(true,false)

当设置为true,启用远程调试,Gradle 会在端口 5005 上启动一个调试服务器,并等待调试器连接。注意,这会导致 JVM 暂停,直到调试器连接为止。

默认是false

org.gradle.java.home=(path to JDK home)

指定Gradle构建过程使用的Java主目录。设置为JDK或JRE的位置,但使用JDK更安全。

默认值从环境变量(如JAVA_HOME)或java命令的路径中派生。

org.gradle.jvmargs=(JVM arguments)

为Gradle守护进程指定JVM参数。特别有用于配置JVM内存设置以优化构建性能。

默认值是-Xmx512m "-XX:MaxMetaspaceSize=384m"。

org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

当设置为quiet、warn、 info,、或 debug时,Gradle会使用设置的日志级别。

默认是lifecycle级别。

org.gradle.priority=(low,normal)

指定Gradle守护进程及其启动的所有进程的调度优先级。

默认值是normal。

org.gradle.warning.mode=(all,fail,summary,none)

设置Gradle如何处理警告信息。

默认是summary

下面的例子演示了如何使用Gradle属性。

例子1:在gradle.properties文件中设置Gradle属性:

gradlePropertiesProp=gradlePropertiesValue

gradleProperties.with.dots=gradlePropertiesDottedValue

例子2:在配置阶段读取系统属性:

//settings.gradle

// Using the API, provides a lazy Provider<String>

println providers.gradleProperty('gradlePropertiesProp').get()

// Using Groovy dynamic names

println gradlePropertiesProp

println settings.gradlePropertiesProp

// Using Groovy dynamic array notation on `settings`

println settings['gradlePropertiesProp']

//

//build.gradle

// Using the API, provides a lazy Provider<String>

println providers.gradleProperty('gradlePropertiesProp').get()

// Using Groovy dynamic names

println gradlePropertiesProp

println project.gradlePropertiesProp

// Using Groovy dynamic array notation on `project`

println project['gradlePropertiesProp']

也可以像使用项目额外属性一样,比如ext["gradlePropertiesProp"]。

注意,如果Gradle属性的名称中有一个点,那么使用动态Groovy名称是不可能的,必须使用API或动态数组表示法。

例子3:在执行阶段读Gradle属性:

tasks.register('printProperty', PrintValue) {

    // Using the API, provides a lazy Provider<String> wired to a task input

    inputValue = providers.gradleProperty('gradlePropertiesProp')

}

例子4:从命令行设置Gradle属性:

$ ./gradlew -DgradlePropertiesProp=commandLineValue

在子项目目录下的gradle.properties文件中申明的属性,只对当前项目或其子项目可用。

环境变量(Environment variables) 

Gradle提供了一些环境变量,如下面列出来的这些,你可以在构建脚本中使用System.getenv()方法来访问。

GRADLE_HOME

Gradle安装目录,可以用来指定一个本地的Gradle版本,而不使用wrapper

JAVA_OPTS

通常用于传递JVM选项和自定义设置给JVM,例如,JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k"表示设置服务器模式,初始和最大堆内存各为2048MB,以及线程栈大小为512KB。

然而并非所有的 Java 应用程序都会考虑 JAVA_OPTS。这取决于应用程序的启动脚本是否设计为读取并使用这个环境变量。

GRADLE_OPTS

用于指定启动 Gradle 客户端 VM 时要使用的 JVM 参数,这里的“客户端 VM”指的是处理命令行输入/输出的 Gradle 进程,而不是实际执行构建的进程。因此,这个环境变量主要用于调整 Gradle 命令行客户端的性能和行为。实际的构建任务是由 Gradle 守护进程(Gradle Daemon)执行的,而这个环境变量并不影响守护进程的配置。

GRADLE_USER_HOME

指定了 Gradle 用来存储其全局配置属性、初始化脚本、缓存、日志文件等的目录。

如果没有设置,默认是USER_HOME/.gradle。

JAVA_HOME

指定 JDK(Java 开发工具包)的安装目录,这个环境变量对于许多 Java 相关的工具和应用程序来说都是必要的,因为它们需要知道在哪里可以找到 Java 运行时环境和编译工具。

对于 Gradle 来说,JAVA_HOME 指定的 JDK 会被用于 Gradle 客户端 VM。此外,如果没有在 Gradle 属性文件中通过 org.gradle.java.home 指定其他的 JDK 路径,那么这个 JDK 也会被 Gradle 守护进程使用。

下面的例子演示了如何使用环境变量。

例子1:在配置阶段读取环境变量:

//init.gradle

// Using the Java API

println System.getenv('ENVIRONMENTAL')

//

//settings.gradle

// Using the Java API

println System.getenv('ENVIRONMENTAL')

// Using the Gradle API, provides a lazy Provider<String>

println providers.environmentVariable('ENVIRONMENTAL').get()

//

//build.gradle

// Using the Java API

println System.getenv('ENVIRONMENTAL')

// Using the Gradle API, provides a lazy Provider<String>

println providers.environmentVariable('ENVIRONMENTAL').get()

例子2:在执行阶段读取环境变量:

//build.gradle

tasks.register('printValue', PrintValue) {

    // Using the Gradle API, provides a lazy Provider<String> wired to a task input

    inputValue = providers.environmentVariable('ENVIRONMENTAL')

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/14833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud快速入门

Spring Cloud是一个用于构建微服务架构的开源框架&#xff0c;它基于Spring Boot&#xff0c;旨在简化分布式系统的开发。以下是Spring Cloud应用框架的快速入门步骤&#xff1a; 环境准备&#xff1a; 安装Java JDK&#xff1a;确保你的开发环境已经安装了Java JDK&#xff0c…

苹果CMS:怎么重新安装

当我们安装好苹果CMS之后苹果cms&#xff1a;介绍及安装&#xff0c;但是最好我们在安装的时候配置好对应配置后&#xff0c;备份一份&#xff0c;如果不记得哪里配置出了问题&#xff0c;出现一些不可预料的问题&#xff0c;那我们可以简单暴力的直接重新安装&#xff0c;我们…

Agency Swarm介绍:构建和管理智能代理的未来

随着人工智能技术的迅速发展&#xff0c;智能代理正在成为现实世界中不可或缺的一部分。Agency Swarm是一个由Arsenii Shatokhin&#xff08;VRSEN&#xff09;创建的开源框架&#xff0c;它简化了自定义智能代理的创建过程&#xff0c;并允许用户构建协作的代理群&#xff08;…

211初试自命题复试线仅302分!延边大学计算机考研考情分析!

延边大学&#xff08;Yanbian University&#xff09;&#xff0c;简称“延大”&#xff0c;地处吉林省延边朝鲜族自治州&#xff0c;是国家“双一流”建设高校、国家“211工程”重点建设大学、西部开发重点建设院校、吉林省人民政府和教育部共同重点支持建设大学、吉林省人民政…

计算机如何将输入文字显示出来的?渲染Image rendering

1.文字渲染的简单理解 渲染图像&#xff0c;可以理解为用cpu/gpu构造出原本不存在的图像。比如输入计算机的英文字符都是ASCII码&#xff0c;而我们在屏幕上看到显示的字符对应的应该是RGB/YUV的像素。计算机把ASCII字符转化成像素的过程就是文字渲染。又比如我们GPU用多个2D图…

Rust: 编译过程中链接器 `cc` 没有找到

这个错误信息表明在编译过程中链接器 cc 没有找到。cc 通常是 C 编译器的符号链接&#xff0c;它指向系统上的实际 C 编译器&#xff0c;如 gcc 或 clang。这个错误通常意味着你的系统缺少必要的编译工具链。 要解决这个问题&#xff0c;你需要确保你的系统上安装了 C 编译器。…

DolphinDB 携手九鞅科技,助力固收投研效能飞跃

随着金融市场开放的广度与深度不断拓宽&#xff0c;金融产品呈现出多样化的发展态势&#xff0c;其中债券投资组合凭借其低风险性、高流动性与稳健的收益表现&#xff0c;逐渐成为投资理财领域备受瞩目的焦点。投资经理不仅需要了解哪些债券值得投资&#xff0c;更要对债券投资…

neo4j、leafletjs、Cypher、celery、mysql去重、docker-compose doc

docker documentation leafletjs英文 leafletjs中文 python for neo4j第三方库neo4j Experience Neo4j on Your Desktop neo4j前端组件 neo4j中文文档&#xff08;可能补全&#xff09; Cypher 查询语法&#xff08;中文&#xff09; Deployment Center DELETE FROMtabl…

C++报错:没有与参数列表匹配的构造函数 (能确定类型是正确的)

原因&#xff1a; 构造函数定义的参数是“引用类型”&#xff0c;而你使用时&#xff0c;传入了临时变量 背景&#xff1a; 构造函数如下&#xff1a; Ray(Vector3d& p, Vector3d& d); 错误代码如下&#xff1a; Ray r1 Ray(Vector3d(0.0f,0.0f,3.0f) , Vector3…

web4.0-元宇宙虚拟现实

互联网一直在不断演变和改变我们的生活方式&#xff0c;从Web逐渐 1.0时代的静态网页到Web 2.0时代的社会性和内容制作&#xff0c;再从Web逐渐 在3.0阶段&#xff0c;互联网发展一直推动着大家时代的发展。如今&#xff0c;大家正站在互联网演化的新起点上&#xff0c;迈入Web…

Loongnix20.5系统ssh无法远程登陆问题

1. 确认客户端与服务器网络通信正常&#xff0c;能ping通。 2. 确认已启动ssh服务。 service ssh start后ssh登录正常。

微信hook协议3.84最新版

PC微信接口使用说明 用户故事 更新日志 登录与退出 获取进程端口占用信息 获取微信进程总数 启动微信 点击登陆微信 刷新并获取登录二维码 获取登录二维码数据(可以不调用) 获取微信登陆状态 退出微信 结束微信 个人信息管理 获取个人详细信息 保存收款码 获取本人地址 修改本人…

如何彻底搞懂装饰器(Decorator)设计模式?

对于任何一个软件系统而言&#xff0c;往现有对象中添加新功能是一种不可避免的实现场景&#xff0c;但这一实现过程对现有系统的影响可大可小。从架构设计上讲&#xff0c;我们也知道存在一个开闭原则&#xff08;Open-Closed Principle&#xff0c;OCP&#xff09;&#xff0…

android git提交代码命令以及常见命令的使用

安装Git Ubuntu&#xff1a; sudo apt-get install git-core创建代码仓库&#xff1a; 配置身份&#xff1a; git config --global user.name "Tony" git confit --global user.email "tonygmail.com"查看身份&#xff1a; git config --global user.…

【简单介绍下7-Zip,什么是7-Zip?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

FFmpeg源码:#define IMAGEAUTO_DEMUXER(imgname, codecid) 宏定义分析

在FFmpeg源码&#xff08;以5.0.3版本为例&#xff09;目录下的libavformat/img2dec.c中存在如下宏定义 #define IMAGEAUTO_DEMUXER(imgname, codecid)\ const AVInputFormat ff_image_ ## imgname ## _pipe_demuxer {\.name AV_STRINGIFY(imgname) "_pipe&q…

C++语言学习(五)—— 类与对象(一)

目录 一、类类型的定义 二、类成员的访问控制 2.1 什么是"类内"和"类外" 2.2 对于访问控制属性的说明 三、类类型的使用 3.1 进行抽象 3.2 声明类 3.3 实现类 3.4 使用类 四、构造函数的引入 五、析构函数的引入 六、重载构造函数的引入 6.1 …

Redis防止缓存穿透和接口的幂等性!!!

场景&#xff1a;我们在访问商品详情页面的时候&#xff0c;会通过商品的id去查询商品的详细信息&#xff0c;这时候我们的接口就会暴漏&#xff0c;为防止缓存穿透&#xff0c;我们通过reids的 实现了接口的幂等性。 代码示例&#xff1a; package com.beimao.service;import…

ip地址分类简介

$$A类&#xff1a;网络号8位&#xff0c;主机号24位。A类地址适用于大型网络&#xff0c;能够支持最大的网络节点数。 A类地址特征&#xff1a;网络号首位为0。 00000000.00000000.00000000.00000000 - 01111111.11111111.11111111.11111111 换算为十进制为&#xff1a; 0.0.0.…

一文读懂“双随机、一公开”:企业监管新风向

在这个信息透明化、法治化日益增强的时代&#xff0c;政府对企业监管的方式也在不断创新和完善。“双随机、一公开”作为一种新型监管模式&#xff0c;正逐渐成为市场监管领域的关键词。对于企业或个体工商户而言&#xff0c;了解并适应这一监管机制&#xff0c;对于维护自身合…