在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... }對于在其本地配置中定義了bintrayUser和bintrayKey的項目開發人員而言,它工作正常,但是對于每個未每日上傳到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 tasks或gw 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
總結
以上是生活随笔為你收集整理的在Gradle 2.13中更好地处理“在插件Y上找不到属性X”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux if语句(linux if
- 下一篇: jframe透明_使JFrame透明