AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

推薦 9 個 Gradle 優秀實踐,進階必備!

來源: 責編: 時間:2023-10-08 07:05:10 235觀看
導讀1.使用 Gradle 包裝器包裝器是項目中包含的特殊腳本,用于下載正確的 Gradle 版本并執行構建。使用包裝器有 3 大優點:不需要在本地安裝 Gradle 來進行構建可以始終使用項目支持的 Gradle 版本。更新Gradle版本很容易如

1.使用 Gradle 包裝器

包裝器是項目中包含的特殊腳本,用于下載正確的 Gradle 版本并執行構建。UEp28資訊網——每日最新資訊28at.com

使用包裝器有 3 大優點:UEp28資訊網——每日最新資訊28at.com

  1. 不需要在本地安裝 Gradle 來進行構建
  2. 可以始終使用項目支持的 Gradle 版本。
  3. 更新Gradle版本很容易

如果你的項目中當前沒有包裝器,在 Linux 中可以通過運行 ./gradlew <task-name> 來添加,在Windows 中使用 gradlew.bat <task-name>,那么就不會出錯。UEp28資訊網——每日最新資訊28at.com

2.停止清理項目

如果你每次構建時都執行清理,那么會造成極大的時間浪費,如下:UEp28資訊網——每日最新資訊28at.com

./gradlew clean build

Gradle 有一個很的強功能,稱為增量構建,意味著如果更改項目中的某些內容并運行構建,它只會根據該更改運行必要的任務。例如,如果只修改測試類,Gradle 不需要重新編譯生產代碼。增量構建意味著微小的更改構建速度會非???,從而幫助開發人員完成更多工作。UEp28資訊網——每日最新資訊28at.com

3.添加settings.gradle

settings.gradle文件通常位于項目的根目錄中,用于指定項目名稱以及要添加到構建中的子項目。UEp28資訊網——每日最新資訊28at.com

示例:UEp28資訊網——每日最新資訊28at.com

rootProject.name = 'settings-example'include 'some-subproject'

不過,settings.gradle是可選的。UEp28資訊網——每日最新資訊28at.com

如果缺省該文件,Gradle 將會使用基于目錄名稱的項目名稱,如果項目被克隆到不同名稱的目錄,則其項目名稱將不正確。例如,這可能發生在 CI 服務器上。UEp28資訊網——每日最新資訊28at.com

還有性能影響。如果省略settings.gradle,Gradle 會遞歸地在目錄樹中向上導航以查找此類文件。這可能會產生大量不必要的文件讀取。UEp28資訊網——每日最新資訊28at.com

4. 將任務移至buildSrc

buildSrc目錄位于項目的根目錄中,可以包含 Groovy、Kotlin 或 Java 源代碼。如果build.gradle中有一些任務代碼,則可以轉移到buildSrc,原因有 3 個:UEp28資訊網——每日最新資訊28at.com

  • 清理build.gradle,使其更容易理解
  • 將任務實現與聲明分開
  • 對于多項目構建,任務可以在其他子項目中使用

例如下面這個不太友好的 build.gradle 示例:UEp28資訊網——每日最新資訊28at.com

abstract class RollercoasterTask extends DefaultTask {    @Input    abstract Property<String> getFavouriteCoaster()    RollercoasterTask() {        favouriteCoaster.convention('Space mountain')    }    @TaskAction    def tellMeMyFavourite() {        println "Your favourite coaster is ${favouriteCoaster.get()}!"    }}tasks.register('coaster', RollercoasterTask) {    favouriteCoaster = 'Super-duper loopy coaster'}

隨著build.gradle 的增長,這種代碼會讓你頭暈目眩。解決辦法就是在與build.gradle相同的級別創建buildSrc目錄,結構如下:UEp28資訊網——每日最新資訊28at.com

├── build.gradle├── buildSrc│   └── src│       └── main│           └── groovy│               └── com│                   └── tomgregory│                       └── RollercoasterTask.groovy

可以將類定義從build.gradle轉移到RollercoasterTask.groovy中。只需包含相關的package和import 即可。如下:UEp28資訊網——每日最新資訊28at.com

package com.tomgregoryimport org.gradle.api.DefaultTaskimport org.gradle.api.provider.Propertyimport org.gradle.api.tasks.Inputimport org.gradle.api.tasks.TaskActionabstract class RollercoasterTask extends DefaultTask {    @Input    abstract Property<String> getFavouriteCoaster()    RollercoasterTask() {        favouriteCoaster.convention('Space mountain')    }    @TaskAction    def tellMeMyFavourite() {        println "Your favourite coaster is ${favouriteCoaster.get()}!"    }}

在build.gradle中,可以用單個 import 語句替換類定義。UEp28資訊網——每日最新資訊28at.com

import com.tomgregory.RollercoasterTasktasks.register('coaster', RollercoasterTask) {    favouriteCoaster = 'Super-duper loopy coaster'}

這樣就清晰多了。UEp28資訊網——每日最新資訊28at.com

5. 并行運行測試

可以充分利用可用的 CPU 內核來并行運行測試,build.gradle 添加如下配置:UEp28資訊網——每日最新資訊28at.com

test {    maxParallelForks 3}

完成此操作后,Gradle 將會并行執行測試。這里配置了3個執行器,可根據實際配置此參數。UEp28資訊網——每日最新資訊28at.com

6. 項目進行版本化

對 Gradle 項目進行版本控制可以讓你更輕松地了解何時引入了更改。當其他人使用你的項目時,這一點尤其重要。UEp28資訊網——每日最新資訊28at.com

例如,Gradle 本身使用相當標準的版本號系統,其中包括主版本、次版本和補丁版本。UEp28資訊網——每日最新資訊28at.com

UEp28資訊網——每日最新資訊28at.com

這樣做的好處是 Gradle 用戶,在升級 Gradle 時可以輕松了解更改的范圍。當主要版本增加時,這表明可能會有重大更改,我們應該閱讀發行說明。UEp28資訊網——每日最新資訊28at.com

在 Gradle 中,設置版本號是在build.gradle中完成的,如下所示:UEp28資訊網——每日最新資訊28at.com

version = '0.1.0'

7. 將任務聲明封裝在插件中

任務聲明是創建某個任務類的實例時,通常配置一些任務屬性。UEp28資訊網——每日最新資訊28at.com

如下創建了一個名為copyQuote的 Copy 任務:UEp28資訊網——每日最新資訊28at.com

project.tasks.register('copyQuote', Copy) {    from 'quote.txt'    into "$project.buildDir/quotes"    filter(ReplaceTokens, tokens: [CHARACTER: 'Tweedledee'])}

事實上,在build.gradle中聲明此任務可能會導致幾個問題:UEp28資訊網——每日最新資訊28at.com

  • 額外的代碼使得從高層次理解build.gradle變得更加困難
  • 如果在不同的子項目中聲明類似的任務,可能會出現重復

解決方案是將邏輯移至插件中,如果只需要在自己的項目(而不是其他項目)中使用該插件,則可以在buildSrc目錄中定義它。UEp28資訊網——每日最新資訊28at.com

.├── build.gradle├── buildSrc│   └── src│       └── main│           ├── groovy│           │   └── com│           │       └── tomgregory│           │           ├── WonderlandPlugin.groovy

將copyQuote任務移動到插件類中,代碼如下:UEp28資訊網——每日最新資訊28at.com

package com.tomgregoryimport org.apache.tools.ant.filters.ReplaceTokensimport org.gradle.api.Pluginimport org.gradle.api.Projectimport org.gradle.api.tasks.Copyclass WonderlandPlugin implements Plugin<Project> {    void apply(Project project) {        def extension = project.extensions.create('wonderland', WonderlandPluginExtension)        project.tasks.register('copyQuote', Copy) {            from 'quote.txt'            into "$project.buildDir/quotes"            filter(ReplaceTokens, tokens: [CHARACTER: extension.characterName.get()])        }    }}

現在build.gradle可以大大簡化。UEp28資訊網——每日最新資訊28at.com

plugins {    id 'wonderland'}wonderland {    characterName = 'Tweedledee'}

8. 優化存儲庫

在build.gradle中聲明存儲庫告訴 Gradle 應該在哪里查找構建應用程序所需的依賴項。UEp28資訊網——每日最新資訊28at.com

例如,在這里我們告訴 Gradle 查看我的自定義本地 Maven 存儲庫和 Maven Central。UEp28資訊網——每日最新資訊28at.com

repositories {    maven {        name = 'tomRepo'        url 'http://localhost:8081/repository/snapshots'        allowInsecureProtocol true        credentials(PasswordCredentials)    }    mavenCentral()}

假設同一個項目需要這些依賴項來構建 Java 應用程序。UEp28資訊網——每日最新資訊28at.com

dependencies {    implementation group: 'com.tom', name: 'artifact-to-publish', version: '1.0-SNAPSHOT'    implementation 'commons-lang:commons-lang:2.6'    implementation 'com.google.guava:guava:30.1.1-jre'    implementation 'org.mapstruct:mapstruct:1.4.2.Final'    implementation 'org.hibernate:hibernate-validator:7.0.1.Final'}

第一個依賴項來自本地 Maven 存儲庫,但其他依賴項可在 Maven Central 中找到。UEp28資訊網——每日最新資訊28at.com

9. 切勿提交密碼

你是否曾經將密碼提交到版本控制中然后遭受領導的鄙夷,或者被安全公司審查出安全問題。接下來我們將介紹如何避免。UEp28資訊網——每日最新資訊28at.com

不過,這已經成為過去,因為 Gradle 提供了許多我們可以將憑證移出項目的方法。UEp28資訊網——每日最新資訊28at.com

示例:UEp28資訊網——每日最新資訊28at.com

repositories {    maven {        name = 'tomsRepo'        url 'https://xxx.com/maven/demo/'        credentials(PasswordCredentials)    }}

那么 Gradle 將自動查找屬性<repositoryName>Username和<repositoryName>Password.UEp28資訊網——每日最新資訊28at.com

你可以在命令行上傳遞這些參數或在~/.gradle/gradle.properties中設置,如下:UEp28資訊網——每日最新資訊28at.com

// gradle.properties 中配置tomsRepoUsername=myusernametomsRepoPassword=mypassword

另一種方法是直接訪問 Gradle 屬性:UEp28資訊網——每日最新資訊28at.com

repositories {    maven {        url 'https://xxx.com/maven/demo/'        credentials {            username 'toms'            password property('mypw')        }    }}

在命令行或~/.gradle/gradle.properties中傳遞密碼。UEp28資訊網——每日最新資訊28at.com

命令行示例:UEp28資訊網——每日最新資訊28at.com

./gradlew build --refresh-dependencies -Pmypw=<password>


~/.gradle/gradle.properties示例:
UEp28資訊網——每日最新資訊28at.com

mypw=mypassword


UEp28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-12296-0.html推薦 9 個 Gradle 優秀實踐,進階必備!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 分享30個避免低級Bug的代碼技巧清單!

下一篇: 12字真言,教你如何選擇Gradle和Maven

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

    6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產品也出現了歷史低價,那么各個價位段的產品性價比
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法??梢杂脕戆l現應用程序、操作系統和網絡協議等中的漏洞或
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內直播,
  • 機構稱Q2國內智能手機銷量同比下滑4% vivo份額重回第1

    7月29日消息,根據市場調查機構Counterpoint Research公布的最新報告,2023年第2季度中國智能手機銷量同比下降4%,創新自2014年以來第2季度銷量新低。報
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 榮耀Magic4 至臻版 首創智慧隱私通話 強勁影音系統

    2022年第一季度臨近尾聲,在該季度內,許多品牌陸續發布自己的最新產品,讓大家從全新的角度來了解當今的手機技術。手機是電子設備中,更新迭代十分迅速的一款產品,基
Top