在Gradle 2.13中更好地处理“在插件Y上找不到属性X”

您可能从未听说过的服务缺少用户名,密码或令牌? 这通常发生在您尝试执行任何操作(例如仅构建项目)时,不仅发生在使用给定的插件(例如在线代码覆盖工具)时。 我不想修改我的环境,而只是为另一个开源项目提供一个小的修复。 这很烦我,我想更改它。 从Gradle 2.13开始,这成为可能。 但是,让我们从原因开始(如果您仅对解决方案感兴趣,请前进至最后两段)。

为什么会显示“找不到财产……”?

大多数Gradle插件都需要配置。 可以直接在build.gradle设置一些属性,但是其他一些属性(尤其是凭据)最好保留在~/.gradle/gradle.properties 。 因此,插件配置部分通常如下所示:

bintray {user = project.getProperty('bintrayUser')key = project.getProperty('bintrayKey')...
}

或者那个:

bintray {user = getProperty('bintrayUser')key = getProperty('bintrayKey')...
}

甚至更短:

bintray {user = bintrayUserkey = bintrayKey...
}

对于在其本地配置中定义了bintrayUserbintrayKey的项目开发人员而言,它工作正常,但是对于每个未每日上传到Bintray的人,它都会失败:

* What went wrong:
A problem occurred evaluating root project 'another-nice-open-source-project'.
> Could not find property 'bintrayKey' on com.jfrog.bintray.gradle.BintrayExtension_Decorated@2ecc563.

结果是project.getProperty() (未提及显式分配)只是在未找到特定属性时引发异常。 不好的是,代码是在配置短语中执行的。 因此,即使与该特定插件无关的每项任务(例如gw tasksgw wrapper )的执行都会失败。

作为解决方法,必须执行防护检查:

bintray {    //Gradle <2.13user = hasProperty('bintrayUser') ? getProperty('bintrayUser') : ''key = hasProperty('bintrayKey') ? getProperty('bintrayKey') : ''...
}

看起来不太紧凑。 作为另一个选择,可以将虚拟占位符保留在项目配置中,但是从Gradle 2.13开始,有一种更好的方法来应对。

project.findProperty()

Gradle 2.13是我对新方法project.findProperty() 贡献的第一个版本。 它的行为与getProperty()相同,但是不抛出异常,而是返回null值。 这大大简化了分配:

bintray {    //Gradle 2.13+user = findProperty('bintrayUser') ?: ''key = findProperty('bintrayKey') ?: ''...
}

有人可能会说Optional作为返回值可能会更好,但这是一个API,并且Gradle支持早于8的Java。

摘要

对我来说, findProperty是我在Gradle中经常寻找的一种方法。 很遗憾,我花了一年多的时间才提出这项要求。 Gradle 2.13刚刚发布,跨项目的版本升级将逐步进行。 这可能需要一些时间,但是每个迁移到2.13的项目都将能够简化其配置,使“无法在插件Y上找到属性X”错误消息成为过去的回忆(当然,除非您确实需要将特定的插件配置为用它)。

经过Gradle 2.13测试。

翻译自: https://www.javacodegeeks.com/2016/04/better-dealing-not-find-property-x-plugin-y-gradle-2-13.html

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

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

相关文章

2018/7/31 -zznu-oj -问题 C: 磨刀- 【扩展欧几里得算法的基本应用】

问题 C: 磨刀 时间限制: 1 Sec 内存限制: 128 MB提交: 190 解决: 39[提交] [状态] [讨论版] [命题人:admin]题目描述 磨刀是一个讲究的工作&#xff0c;只能在n℃下进行&#xff0c;所以我们首先要做的就是把刀的表面温度提升到n℃。处理刀身温度有两种方式&#xff1a;1.淬火…

统计各个函数的耗时_分享一次CMS GC耗时狠高优化过程全记录

1. 背景多个业务线的应用出现LongGC告警最近一段时间&#xff0c;经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。2. 知识回顾2.1 JVM堆内存划分新生代(Young Generation)新生代内被划分为三个区&#xff1a;Eden&#xff0c;from survivor&#xff0c;to survivor…

用JDBC直连方式访问SQL Server 2005详解

用JDBC直连方式访问SQL Server 2005详解 1.安装JDK&#xff0c;配置其环境变量&#xff1a;(笔者所用版本为1.6版) &#xff08;1&#xff09;从官方网http://java.sun.com/jdk下载安装文件。 &#xff08;2&#xff09;安装下载下来的安装包&#xff0c;按照提示安装成…

string类有可以调换方向的函数吗_深度剖析C++中的inline函数

点蓝色字关注“CurryCoder”微信公众号&#xff1a;CurryCoder的程序人生 怕什么真理无穷&#xff0c;进一寸有一寸的欢喜1.inline函数的爱恨两难内联函数比宏优点好很多&#xff0c;详细原因请参见尽量以const、enum、inline替换#define 。调用内联函数不需要承受函数调用所导…

javafx基础教程_JavaFX教程–基础

javafx基础教程JavaFX似乎正在RIA领域获得发展。 有了正确的工具和开发支持&#xff0c;它肯定会成为下一个最佳技术“物”的代价。 我没有在这里写任何JavaFX评论&#xff0c;因为有很多技术评论可能对它进行了广泛的评论&#xff0c;但是&#xff0c;我将编写一个简单的教程&…

prepareStatement与Statement的区别

prepareStatement与Statement的区别 1:创建时的区别&#xff1a; Statement stmcon.createStatement(); PreparedStatement pstmcon.prepareStatement(sql); 执行的时候: stm.execute(sql); pstm.execute(); 2: pstm一旦绑定了SQL,此pstm就不能执行其他的S…

什么是Spring Boot以及为什么它是用于创建微服务的首选框架

为什么要使用Spring Boot创建微服务&#xff1f; Spring Boot是Java领域众所周知的首选框架&#xff0c;用于创建Micro Services。 使用Spring引导框架&#xff0c;可以非常轻松地创建Java应用程序。 现在&#xff0c;我们将看到Spring启动框架的一些功能&#xff0c;这使其成为…

嵌入式开发有年龄限制吗_什么?!考教资有年龄限制了?2020年我还能考吗?...

近几年教师资格证越来越火爆越来越多的人都想报考&#xff0c;却又担心年龄问题&#xff0c;那么考教师资格证有年龄限制吗&#xff1f;下面小编就给大家解答一下这个问题&#xff1a;报考教师资格证是没有年龄限制的&#xff0c;只有学历限制。报考幼师教师资格证的考生必须是…

Python3的bytes/str之别

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode&#xff0c;由str类型表示&#xff0c;二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes&#xff0c;正是这使得两者的区分特别清晰。你不能拼接字符串和字节…

jframe透明_使JFrame透明

jframe透明首先创建一个带有滑块的框架&#xff0c;该滑块将用于设置透明度量。 import javax.swing.JFrame; import javax.swing.JSlider;public class TransparentFrame extends JFrame {public TransparentFrame() {setTitle(Transparent Frame);setSize(400,400);setDefaul…

MyEclipse下Tomcat启动变慢的解决方法

项目忽然使用debug启动有时候会突然变得非常慢。不但启动慢&#xff0c;启动之后连打开项目标页面也很慢&#xff0c;是日常平凡的4&#xff0c;5倍。可以有下面的几种解决方法&#xff1a; 1、由于Tomcat是服务器,部署好的工程就会一直驻留到服务器里,每次启动都会把部署到服务…

Python关于Threading暂停恢复解决办法

我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志…

stm32l4 外部中断按键会卡死_STM32学习之路-按键中断测试(外部中断)

void RCC_Config(void){SystemInit(); //系统时钟初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOE | RCC_APB2Periph_G…

NetBeans Java EE技巧9:从数据库创建JSF应用程序

您需要非常快速地创建数据库前端吗&#xff1f; NetBeans IDE允许人们以极少的编码就非常快速地为一组数据库表开发JSF应用程序前端。 现在&#xff0c;本教程既是老歌&#xff0c;又是老歌……对于那些不了解它的人来说&#xff0c;值得再次提及。 首先&#xff0c;创建您的应…

[模板]树链剖分

用途 我想把一个本来是线性的东西放到树上做&#xff0c;维护路径或者是子树的各种性质&#xff0c;那就用树剖呗 它可以套线段树、树状数组、ST表&#xff08;以及其他我不知道的&#xff09; 做法 我们考虑把树分成一条条链&#xff0c;然后对每条链维护我们的数据结构&#…

sql server 2005单独添加mdf文件

我把原来的数据库分离后&#xff0c;直接把日志文件给干掉了。原来在SQL 2000里经常这么干&#xff0c;只用一个mdf就附加了。没想到sql2005居然不行。我试验了一圈 终于找到一个成功的方法。转载&#xff0c;供后来者参考。SQL2005 如何在没有日志文件的情况下如何恢复MDF数据…

低压抽屉柜常见故障处理方法_低压配电设备常见故障分析,处理办法介绍

低压配电线路作为配电网络中主要的一部分&#xff0c;在其运行的过程中直接影响着人民的生命财产安全。配电线路是电力输送的终端&#xff0c;对于提高电力质量有着至关重要的作用。但由于配电线路走径的复杂性&#xff0c;人为因素和设备因素&#xff0c;都会给低压配电设备造…

关于C语言中的'\?'和%%

关于C语言中的\?和%% 一、引语 我们知道C/C中有四个非字母的字符需要用转义字符来表示&#xff1a;单引号 , 双引号 " , 反斜杆 \ 和问号 ? 显然这是因为它们本身有特殊的含义&#xff0c;所以要用转义字符来表示他们自己&#xff0c;单引号用来表示单个字符&#xff0…