指定Gradle构建属性

属性是用于轻松自定义Gradle构建和Gradle环境的宝贵工具。 我将在本文中演示一些用于指定Gradle构建中使用的属性的方法。

Gradle支持项目属性系统属性 。 这篇文章中有趣的是两者之间的主要区别是如何访问它们。 通过常规Java / Groovy系统属性访问方法访问系统属性时,项目属性更有助于按名称直接访问。

使用-P从命令行传递项目属性

将属性传递到Gradle构建的最简单方法之一是在命令行中使用-P指定项目属性。 使用-P传递给构建的属性可以在构建中作为项目属性轻松访问,并且如果其命名结构允许,则可以像变量一样直接访问。

使用-D从命令行传递系统属性

与其他Java应用程序一样,可以使用-D将系统属性传递给Gradle构建。 尽管通过-D选项提供给Gradle构建的这些系统属性始终可以通过用于获取系统属性的常规Java机制提供给Gradle构建,但是Gradle可以将Project Properties指定为系统属性。 这是通过放置前缀org.gradle.project.来完成的org.gradle.project. 在生成所需属性名称之前。 例如,如果要使用-D指定一个名为name.first的系统属性,该属性可以供Gradle构建使用,就像它由-P提供一样,则该人可以在命令行上将其作为org.gradle.project. name.first提供给Gradle构建org.gradle.project. name.first org.gradle.project. name.first和Gradle构建会将其视为名为name.first的项目属性。

通过环境变量传递系统属性

任何Java或Groovy应用程序(包括Gradle构建)都可以通过System.getenv(String)访问环境变量。 但是,如果环境变量以ORG_GRADLE_PROJECT_为前缀,则Gradle允许像其他项目属性一样在构建中访问环境变量。 例如,如果某人想要在Gradle构建name.last项目属性命名为name.last并想通过环境变量将其提供给构建,则该人可以声明环境变量ORG_GRADLE_PROJECT_name.last并且其值可用于Gradle作为名称为name.last的项目属性进行name.last

gradle.properties

也可以通过名为gradle.properties的属性文件将属性提供给Gradle构建。 用systemProp.指定的任何属性systemProp. 其属性名称的开头被视为Gradle构建中的系统属性,而其他属性(其名称以“ systemProp。开头”)则被视为Gradle项目属性。 例如,如果我的gradle.properties文件具有属性name.last=Marx和属性name.last=Marx systemPropr.name.first=Dustinname.last在Gradle构建中看到并访问name.last属性,就像该name.first任何项目属性一样name.first像任何系统属性一样, name.first属性将在Gradle构建中被看到和访问。

示范/范例

每种类型的属性指定机制都可以通过一个简单的示例进行演示。 接下来显示的Gradle构建会尝试打印以不同方式指定的各种属性。

build-properties.gradle

task displayProperties << {displaySystemProperties()displayGradleProjectProperties()
}def displaySystemProperties()
{println "\n=== System Properties ==="println "Favorite Movie (1994): ${System.properties['movie.favorite.1994']}"println "Favorite Movie (1996): ${System.properties['movie.favorite.1996']}" println "Favorite Movie (1997): ${System.properties['movie.favorite.1997']}"println "Favorite Movie (1981): ${System.properties['movie.favorite.1981']}"println "Favorite Movie (2012): ${System.properties['movie.favorite.2012']}"println "Favorite Movie (2013): ${System.properties['movie.favorite.2013']}"
}def displayGradleProjectProperties()
{println "\n=== Gradle Project Properties ==="println "Favorite Movie (1994): ${getProjectProperty('movie.favorite.1994')}"println "Favorite Movie (1996): ${getProjectProperty('movie.favorite.1996')}"println "Favorite Movie (1997): ${getProjectProperty('movie.favorite.1997')}"println "Favorite Movie (1981): ${getProjectProperty('movie.favorite.1981')}"println "Favorite Movie (2012): ${getProjectProperty('movie.favorite.2012')}"println "Favorite Movie (2013): ${getProjectProperty('movie.favorite.2013')}"
}def String getProjectProperty(String propertyName)
{String movieTitle = "null"if (hasProperty(propertyName)){movieTitle = this.properties[propertyName]}return movieTitle
}

传递给此脚本的某些属性将在命令行中用-P ,一些属性在命令行中用-D ,一个将通过环境变量提供,而两个将通过gradle.properties提供gradle.properties文件与构建文件位于同一目录中。 接下来显示该gradle.properties文件。

gradle.properties

movie.favorite.2013=Star Trek into Darkness
systemProp.movie.favorite.2012=Skyfall

放置好gradle.properties文件后,该示例的其他两个有趣的部分是环境变量的设置。 此处的示例是在DOS中进行的,但是在Linux环境中,可以使用稍有不同的语法来完成同一件事。 DOS / Windows命令是: set ORG_GRADLE_PROJECT.movie.favorite.1981="Raiders of the Lost Ark"

对于此演示,我将使用-D-P参数运行Gradle构建脚本: gradle -b build-properties.gradle displayProperties -Pmovie.favorite.1996="Independence Day" -Dmovie.favorite.1997=Gattaca -Dorg.gradle.project.movie.favorite.1994="Shawshank Redemption"

当在上面列出的Gradle构建脚本中运行并带有指定的gradle.properties文件,指定了指定的环境变量,并且仅显示了命令时,输出看起来像在下一个屏幕快照中所示。

gradlePropertiesProjectSystemEnvironmentalVariable

屏幕快照指示了如何根据其来源和命名约定在Gradle构建中查看/访问属性。 简而言之,输出显示了在Gradle构建中属性可用性的以下“规则”:

  • 命令行-P属性是“项目属性”
  • 命令行-D属性是“系统属性”,但有一个例外
  • org.gradle.project.开头的命令行-D属性org.gradle.project. 是“项目属性”
  • 除了一个例外,在gradle.properties中指定的gradle.properties是“项目属性”
  • gradle.properties中指定的以gradle.properties开头的属性systemProp. 是“系统属性”
  • 除了一个例外,通过环境变量指定的属性是“系统属性”
  • 通过以ORG_GRADLE_PROJECT_开头的环境变量指定的属性是“项目属性”

结论

Gradle提供了多种方法来指定可用于自定义Gradle构建的属性。

参考:在Inspired by Actual Events博客上,从我们的JCG合作伙伴 Dustin Marx 指定Gradle构建属性 。

翻译自: https://www.javacodegeeks.com/2014/01/specifying-gradle-build-properties.html

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

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

相关文章

python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例

本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a; 一、需求 今天写了三千二百行代码。 今天写了3200行代码。 两行意思相同&#xff0c;只是表达方式不太能够&#xff0c;统一掉。 二、原理 数字的特征是 数字 …

高级cmd攻击命令_一步一步学习DVWA渗透测试(Command Injection命令行注入)-第七次课...

各位小伙伴&#xff0c;今天我们继续学习Command Injection&#xff0c;翻译为中文就是命令行注入。是指通过提交恶意构造的参数破坏命令语句结构&#xff0c;从而达到执行恶意命令的目的。在OWASP TOP 10中一种存在注入漏洞&#xff0c;最常见的就是SQL和命令行注入。PHP开发的…

IDEA插件之 CodeGlance

在编辑代码最右侧&#xff0c;显示一块代码小地图 这款插件使用效果图如下&#xff0c;个人感觉还是有点用处&#xff0c;滚动条太小&#xff0c;有这个地图&#xff0c;拖动起来更加方便一点 原文地址:http://tengj.top/2017/02/22/idea1-1/转载于:https://www.cnblogs.com/al…

移动端图片上传方法

移动端图片上传方法 实现效果 文件下载 http://files.cnblogs.com/files/sntetwt/移动端图片上传.rar 实现步骤 一、隐藏<input type"file" id"file" name"Filedata" style"display:none;" accept"image/*" /> 二、…

c语言最大公约数和最小公倍数_五年级奥数课堂之七:公因数和公倍数

乘积尾0的个数公因数和公倍数的基本概念公因数的释义给定若干个整数&#xff0c;如果有一个(些)数是它们共同的因数&#xff0c;那么这个(些)数就叫做它们的公因数。而全部公因数中最大的那个&#xff0c;称为这些整数的最大公因数。公约数与公倍数相反&#xff0c;就是既是A的…

设计模式(五)--工厂模式汇总

LZ想把简单工厂模式、工厂方法模式和抽象工厂模式整理到一篇博文当中&#xff0c;由浅入深&#xff0c;应该能方便理解和记忆&#xff0c;话不多说&#xff0c;进入正题。 一、简单工厂模式 定义&#xff1a;从设计模式的类型上来说&#xff0c;简单工厂模式是属于创建型模式&a…

如何估算内存消耗?

这个故事可以追溯到至少十年之前&#xff0c;当时我第一次接触PHB时遇到一个问题&#xff1a;“在生产部署中&#xff0c;我们需要购买多大服务器”。 我们正在构建的新的&#xff0c;闪亮的系统距离生产开始还有9个月的时间&#xff0c;显然该公司已承诺提供包括硬件在内的整个…

python爬取b站403_Python如何爬取b站热门视频并导入Excel

代码如下 #encoding:utf-8 import requests from lxml import etree import xlwt import os # 爬取b站热门视频信息 def spider(): video_list [] url "https://www.bilibili.com/ranking?spm_id_from333.851.b_7072696d61727950616765546162.3" html requests.g…

使用调试器进行事后跟踪

我最近一直在使用的大多数调试器的好功能是能够在断点上记录信息。 这对理解代码而无需修改是非常有用的&#xff0c;它涉及字节码修改。 让我们考虑一下这种非常琐碎且效率低下的函数实现&#xff0c;以返回斐波那契数列中的第n个数字。 public class Fib {public long fib(…

链表排序c++代码_[链表面试算法](一) 链表的删除-相关题型总结(6题)

在数据结构的最高层抽象里&#xff0c;只有两种结构&#xff0c;数组和链表。这两种结构&#xff0c;是所有其他数据结构实现的基础。队列和栈&#xff0c;可以用链表和数组来实现。图&#xff0c;可以用邻接表和邻接矩阵来实现&#xff0c;其中&#xff0c;邻接表就是链表&…

c语言如何空格键返回主菜单,C语言中scanf函数与空格回车的用法说明

众所周知&#xff0c;C语言中的scanf函数的作用是从标准输入设备(通常是键盘)读取输入值&#xff0c;并存储到参数列表中指针所指向的内存单元。下面从几个方面说一下一些稍微细节的东西。下面的实验都在vc6.0中通过。1、scanf的返回值scanf通常返回的是成功赋值(从标准输入设备…

Linear_algebra_03_矩阵

1. 矩阵的线性运算&#xff1a; 2.1 矩阵的乘法&#xff1a;Xik * Ykj Zij 2.2 矩阵乘法性质&#xff1a; 3.1 矩阵的幂次方运算 3.2 矩阵转置的运算律 3.3 方阵运算 4 分块矩阵的运算 5. 矩阵的初等变换 5.1 单位矩阵I经过一次初等变换所得到的矩阵称为初等矩阵. 5.2 初等矩…

js转json工具_菜鸟丨Egert3D微信小游戏发布与Unity工具使用

本次教程将会为大家介绍Egret3D工具导出Unity场景对象的使用&#xff0c;以及发布微信小游戏流程。让大家对Egret 3D有更加熟悉的了解。需求工具&#xff1a;1、Unity场景导出插件&#xff1b;2、微信开发者工具。导出插件的使用一、打开需要导出的Unity场景&#xff0c;并且把…

OI杂记

从今天开始记录一下为数不多天的OI历程 8.25 上 今天举行了难得的五校联考&#xff0c;模拟noip&#xff0c;题目的解压密码竟然是$aKnoIp2o18$&#xff0c;对你没有看错&#xff01;&#xff01;&#xff01; 7:50老师&#xff1f;啊啊啊啊&#xff0c;收不到题目啊&#xff0…

Java,Steam控制器和我

您是否想过是否可以将现有的东西用于新的东西&#xff1f; 我看了一些所谓的“蒸汽控制器”&#xff08;从现在开始为SC&#xff09;的镜头&#xff0c;并看着我的游戏手柄。 问我自己是否有可能以类似蒸汽的方式使用它&#xff0c;我找到了一些Java库并创建了一个项目&#xf…

unknown column in field list_tf.feature_column的特征处理探究

1. 背景tf.estimator是tensorflow的一个高级API接口&#xff0c;它最大的特点在于兼容分布式和单机两种场景&#xff0c;工程师可以在同一套代码结构下即实现单机训练也可以实现分布式训练&#xff0c;正是因为这样的特点&#xff0c;目前包括阿里在内的很多公司都在使用这一接…

pytorch如何定义损失函数_对比PyTorch和TensorFlow的自动差异和动态模型

使用自定义模型类从头开始训练线性回归&#xff0c;比较PyTorch 1.x和TensorFlow 2.x之间的自动差异和动态模型子类化方法&#xff0c;这篇简短的文章重点介绍如何在PyTorch 1.x和TensorFlow 2.x中分别使用带有模块/模型API的动态子类化模型&#xff0c;以及这些框架在训练循环…

Gradle命令行便利

在我的《用Gradle构建Java的gradle tasks 》一文中&#xff0c;我简要地提到了使用Gradle的“ gradle tasks ”命令来查看特定Gradle构建的可用任务。 在这篇文章中&#xff0c;我将对这一简短提及进行更多的扩展&#xff0c;并查看一些相关的Gradle命令行便利。 Gradle可以轻松…

java封装实现Excel建表读写操作

对 Excel 进行读写操作是生产环境下常见的业务&#xff0c;网上搜索的实现方式都是基于POI和JXL第三方框架&#xff0c;但都不是很全面。小编由于这两天刚好需要用到&#xff0c;于是就参考手写了一个封装操作工具&#xff0c;基本涵盖了Excel表&#xff08;分有表头和无表头&a…

argmax函数_1.4 TensorFlow2.1常用函数

1.4 TF常用函数tf.cast(tensor,dtypedatatype)可以进行强制类型转换。tf.reduce_min(tensor)和tf.reduce_max(tensor)将计算出张量中所有元素的最大值和最小值。import tensorflow as tfx1 tf.constant([1., 2., 3.], dtypetf.float64)print("x1:", x1)x2 tf.cast(…