日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

推薦 9 個(gè) Gradle 優(yōu)秀實(shí)踐,進(jìn)階必備!

來(lái)源: 責(zé)編: 時(shí)間:2023-10-08 07:05:10 260觀看
導(dǎo)讀1.使用 Gradle 包裝器包裝器是項(xiàng)目中包含的特殊腳本,用于下載正確的 Gradle 版本并執(zhí)行構(gòu)建。使用包裝器有 3 大優(yōu)點(diǎn):不需要在本地安裝 Gradle 來(lái)進(jìn)行構(gòu)建可以始終使用項(xiàng)目支持的 Gradle 版本。更新Gradle版本很容易如

1.使用 Gradle 包裝器

包裝器是項(xiàng)目中包含的特殊腳本,用于下載正確的 Gradle 版本并執(zhí)行構(gòu)建。Nzu28資訊網(wǎng)——每日最新資訊28at.com

使用包裝器有 3 大優(yōu)點(diǎn):Nzu28資訊網(wǎng)——每日最新資訊28at.com

  1. 不需要在本地安裝 Gradle 來(lái)進(jìn)行構(gòu)建
  2. 可以始終使用項(xiàng)目支持的 Gradle 版本。
  3. 更新Gradle版本很容易

如果你的項(xiàng)目中當(dāng)前沒(méi)有包裝器,在 Linux 中可以通過(guò)運(yùn)行 ./gradlew <task-name> 來(lái)添加,在Windows 中使用 gradlew.bat <task-name>,那么就不會(huì)出錯(cuò)。Nzu28資訊網(wǎng)——每日最新資訊28at.com

2.停止清理項(xiàng)目

如果你每次構(gòu)建時(shí)都執(zhí)行清理,那么會(huì)造成極大的時(shí)間浪費(fèi),如下:Nzu28資訊網(wǎng)——每日最新資訊28at.com

./gradlew clean build

Gradle 有一個(gè)很的強(qiáng)功能,稱為增量構(gòu)建,意味著如果更改項(xiàng)目中的某些內(nèi)容并運(yùn)行構(gòu)建,它只會(huì)根據(jù)該更改運(yùn)行必要的任務(wù)。例如,如果只修改測(cè)試類,Gradle 不需要重新編譯生產(chǎn)代碼。增量構(gòu)建意味著微小的更改構(gòu)建速度會(huì)非常快,從而幫助開(kāi)發(fā)人員完成更多工作。Nzu28資訊網(wǎng)——每日最新資訊28at.com

3.添加settings.gradle

settings.gradle文件通常位于項(xiàng)目的根目錄中,用于指定項(xiàng)目名稱以及要添加到構(gòu)建中的子項(xiàng)目。Nzu28資訊網(wǎng)——每日最新資訊28at.com

示例:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

不過(guò),settings.gradle是可選的。Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

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

4. 將任務(wù)移至buildSrc

buildSrc目錄位于項(xiàng)目的根目錄中,可以包含 Groovy、Kotlin 或 Java 源代碼。如果build.gradle中有一些任務(wù)代碼,則可以轉(zhuǎn)移到buildSrc,原因有 3 個(gè):Nzu28資訊網(wǎng)——每日最新資訊28at.com

  • 清理build.gradle,使其更容易理解
  • 將任務(wù)實(shí)現(xiàn)與聲明分開(kāi)
  • 對(duì)于多項(xiàng)目構(gòu)建,任務(wù)可以在其他子項(xiàng)目中使用

例如下面這個(gè)不太友好的 build.gradle 示例:Nzu28資訊網(wǎng)——每日最新資訊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 的增長(zhǎng),這種代碼會(huì)讓你頭暈?zāi)垦!=鉀Q辦法就是在與build.gradle相同的級(jí)別創(chuàng)建buildSrc目錄,結(jié)構(gòu)如下:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

可以將類定義從build.gradle轉(zhuǎn)移到RollercoasterTask.groovy中。只需包含相關(guān)的package和import 即可。如下:Nzu28資訊網(wǎng)——每日最新資訊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中,可以用單個(gè) import 語(yǔ)句替換類定義。Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

這樣就清晰多了。Nzu28資訊網(wǎng)——每日最新資訊28at.com

5. 并行運(yùn)行測(cè)試

可以充分利用可用的 CPU 內(nèi)核來(lái)并行運(yùn)行測(cè)試,build.gradle 添加如下配置:Nzu28資訊網(wǎng)——每日最新資訊28at.com

test {    maxParallelForks 3}

完成此操作后,Gradle 將會(huì)并行執(zhí)行測(cè)試。這里配置了3個(gè)執(zhí)行器,可根據(jù)實(shí)際配置此參數(shù)。Nzu28資訊網(wǎng)——每日最新資訊28at.com

6. 項(xiàng)目進(jìn)行版本化

對(duì) Gradle 項(xiàng)目進(jìn)行版本控制可以讓你更輕松地了解何時(shí)引入了更改。當(dāng)其他人使用你的項(xiàng)目時(shí),這一點(diǎn)尤其重要。Nzu28資訊網(wǎng)——每日最新資訊28at.com

例如,Gradle 本身使用相當(dāng)標(biāo)準(zhǔn)的版本號(hào)系統(tǒng),其中包括主版本、次版本和補(bǔ)丁版本。Nzu28資訊網(wǎng)——每日最新資訊28at.com

Nzu28資訊網(wǎng)——每日最新資訊28at.com

這樣做的好處是 Gradle 用戶,在升級(jí) Gradle 時(shí)可以輕松了解更改的范圍。當(dāng)主要版本增加時(shí),這表明可能會(huì)有重大更改,我們應(yīng)該閱讀發(fā)行說(shuō)明。Nzu28資訊網(wǎng)——每日最新資訊28at.com

在 Gradle 中,設(shè)置版本號(hào)是在build.gradle中完成的,如下所示:Nzu28資訊網(wǎng)——每日最新資訊28at.com

version = '0.1.0'

7. 將任務(wù)聲明封裝在插件中

任務(wù)聲明是創(chuàng)建某個(gè)任務(wù)類的實(shí)例時(shí),通常配置一些任務(wù)屬性。Nzu28資訊網(wǎng)——每日最新資訊28at.com

如下創(chuàng)建了一個(gè)名為copyQuote的 Copy 任務(wù):Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

事實(shí)上,在build.gradle中聲明此任務(wù)可能會(huì)導(dǎo)致幾個(gè)問(wèn)題:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

將copyQuote任務(wù)移動(dòng)到插件類中,代碼如下:Nzu28資訊網(wǎng)——每日最新資訊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()])        }    }}

現(xiàn)在build.gradle可以大大簡(jiǎn)化。Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

8. 優(yōu)化存儲(chǔ)庫(kù)

在build.gradle中聲明存儲(chǔ)庫(kù)告訴 Gradle 應(yīng)該在哪里查找構(gòu)建應(yīng)用程序所需的依賴項(xiàng)。Nzu28資訊網(wǎng)——每日最新資訊28at.com

例如,在這里我們告訴 Gradle 查看我的自定義本地 Maven 存儲(chǔ)庫(kù)和 Maven Central。Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

假設(shè)同一個(gè)項(xiàng)目需要這些依賴項(xiàng)來(lái)構(gòu)建 Java 應(yīng)用程序。Nzu28資訊網(wǎng)——每日最新資訊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'}

第一個(gè)依賴項(xiàng)來(lái)自本地 Maven 存儲(chǔ)庫(kù),但其他依賴項(xiàng)可在 Maven Central 中找到。Nzu28資訊網(wǎng)——每日最新資訊28at.com

9. 切勿提交密碼

你是否曾經(jīng)將密碼提交到版本控制中然后遭受領(lǐng)導(dǎo)的鄙夷,或者被安全公司審查出安全問(wèn)題。接下來(lái)我們將介紹如何避免。Nzu28資訊網(wǎng)——每日最新資訊28at.com

不過(guò),這已經(jīng)成為過(guò)去,因?yàn)?Gradle 提供了許多我們可以將憑證移出項(xiàng)目的方法。Nzu28資訊網(wǎng)——每日最新資訊28at.com

示例:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

那么 Gradle 將自動(dòng)查找屬性<repositoryName>Username和<repositoryName>Password.Nzu28資訊網(wǎng)——每日最新資訊28at.com

你可以在命令行上傳遞這些參數(shù)或在~/.gradle/gradle.properties中設(shè)置,如下:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

另一種方法是直接訪問(wèn) Gradle 屬性:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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

在命令行或~/.gradle/gradle.properties中傳遞密碼。Nzu28資訊網(wǎng)——每日最新資訊28at.com

命令行示例:Nzu28資訊網(wǎng)——每日最新資訊28at.com

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


~/.gradle/gradle.properties示例:
Nzu28資訊網(wǎng)——每日最新資訊28at.com

mypw=mypassword


Nzu28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12296-0.html推薦 9 個(gè) Gradle 優(yōu)秀實(shí)踐,進(jìn)階必備!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 分享30個(gè)避免低級(jí)Bug的代碼技巧清單!

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

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 孟连| 江门市| 鹰潭市| 巴南区| 邯郸县| 南京市| 宁强县| 怀远县| 鄯善县| 正安县| 凤庆县| 延安市| 荆门市| 乌兰察布市| 海南省| 彭泽县| 鄂州市| 保定市| 东平县| 旬邑县| 威信县| 张家川| 堆龙德庆县| 岗巴县| 仪陇县| 仁怀市| 涿鹿县| 泾阳县| 上思县| 茂名市| 邵阳市| 芦溪县| 吐鲁番市| 瑞丽市| 清新县| 武夷山市| 玉门市| 西青区| 武川县| 静海县| 太白县|