精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

推薦 9 個 Gradle 優(yōu)秀實踐,進階必備!

開發(fā) 前端
包裝器是項目中包含的特殊腳本,用于下載正確的 Gradle 版本并執(zhí)行構建。

1.使用 Gradle 包裝器

包裝器是項目中包含的特殊腳本,用于下載正確的 Gradle 版本并執(zhí)行構建。

使用包裝器有 3 大優(yōu)點:

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

如果你的項目中當前沒有包裝器,在 Linux 中可以通過運行 ./gradlew <task-name> 來添加,在Windows 中使用 gradlew.bat <task-name>,那么就不會出錯。

2.停止清理項目

如果你每次構建時都執(zhí)行清理,那么會造成極大的時間浪費,如下:

./gradlew clean build

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

3.添加settings.gradle

settings.gradle文件通常位于項目的根目錄中,用于指定項目名稱以及要添加到構建中的子項目。

示例:

rootProject.name = 'settings-example'

include 'some-subproject'

不過,settings.gradle是可選的。

如果缺省該文件,Gradle 將會使用基于目錄名稱的項目名稱,如果項目被克隆到不同名稱的目錄,則其項目名稱將不正確。例如,這可能發(fā)生在 CI 服務器上。

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

4. 將任務移至buildSrc

buildSrc目錄位于項目的根目錄中,可以包含 Groovy、Kotlin 或 Java 源代碼。如果build.gradle中有一些任務代碼,則可以轉移到buildSrc,原因有 3 個:

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

例如下面這個不太友好的 build.gradle 示例:

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相同的級別創(chuàng)建buildSrc目錄,結構如下:

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

可以將類定義從build.gradle轉移到RollercoasterTask.groovy中。只需包含相關的package和import 即可。如下:

package com.tomgregory

import org.gradle.api.DefaultTask
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction

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()}!"
    }
}

在build.gradle中,可以用單個 import 語句替換類定義。

import com.tomgregory.RollercoasterTask

tasks.register('coaster', RollercoasterTask) {
    favouriteCoaster = 'Super-duper loopy coaster'
}

這樣就清晰多了。

5. 并行運行測試

可以充分利用可用的 CPU 內核來并行運行測試,build.gradle 添加如下配置:

test {
    maxParallelForks 3
}

完成此操作后,Gradle 將會并行執(zhí)行測試。這里配置了3個執(zhí)行器,可根據(jù)實際配置此參數(shù)。

6. 項目進行版本化

對 Gradle 項目進行版本控制可以讓你更輕松地了解何時引入了更改。當其他人使用你的項目時,這一點尤其重要。

例如,Gradle 本身使用相當標準的版本號系統(tǒng),其中包括主版本、次版本和補丁版本。

這樣做的好處是 Gradle 用戶,在升級 Gradle 時可以輕松了解更改的范圍。當主要版本增加時,這表明可能會有重大更改,我們應該閱讀發(fā)行說明。

在 Gradle 中,設置版本號是在build.gradle中完成的,如下所示:

version = '0.1.0'

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

任務聲明是創(chuàng)建某個任務類的實例時,通常配置一些任務屬性。

如下創(chuàng)建了一個名為copyQuote的 Copy 任務:

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

事實上,在build.gradle中聲明此任務可能會導致幾個問題:

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

解決方案是將邏輯移至插件中,如果只需要在自己的項目(而不是其他項目)中使用該插件,則可以在buildSrc目錄中定義它。

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

將copyQuote任務移動到插件類中,代碼如下:

package com.tomgregory

import org.apache.tools.ant.filters.ReplaceTokens
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Copy

class 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可以大大簡化。

plugins {
    id 'wonderland'
}

wonderland {
    characterName = 'Tweedledee'
}

8. 優(yōu)化存儲庫

在build.gradle中聲明存儲庫告訴 Gradle 應該在哪里查找構建應用程序所需的依賴項。

例如,在這里我們告訴 Gradle 查看我的自定義本地 Maven 存儲庫和 Maven Central。

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

假設同一個項目需要這些依賴項來構建 Java 應用程序。

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 中找到。

9. 切勿提交密碼

你是否曾經(jīng)將密碼提交到版本控制中然后遭受領導的鄙夷,或者被安全公司審查出安全問題。接下來我們將介紹如何避免。

不過,這已經(jīng)成為過去,因為 Gradle 提供了許多我們可以將憑證移出項目的方法。

示例:

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

那么 Gradle 將自動查找屬性<repositoryName>Username和<repositoryName>Password.

你可以在命令行上傳遞這些參數(shù)或在~/.gradle/gradle.properties中設置,如下:

// gradle.properties 中配置
tomsRepoUsername=myusername
tomsRepoPassword=mypassword

另一種方法是直接訪問 Gradle 屬性:

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

在命令行或~/.gradle/gradle.properties中傳遞密碼。

命令行示例:

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


~/.gradle/gradle.properties示例:

mypw=mypassword


責任編輯:華軒 來源: 今日頭條
相關推薦

2020-07-06 13:30:31

前端開發(fā)技術

2021-04-21 11:12:09

CIO大數(shù)據(jù)數(shù)據(jù)驅動

2023-07-03 12:09:38

云日志云服務

2021-03-25 08:00:00

首席信息官IT技術

2022-05-23 09:20:00

數(shù)據(jù)庫架構

2011-08-04 13:58:45

JavaScript

2020-06-24 07:47:16

Linux工具版本

2022-10-10 14:53:00

云安全云計算云平臺

2020-11-24 10:32:16

CIO首席信息官工具

2021-05-26 08:50:37

JavaScript代碼重構函數(shù)

2021-03-01 19:24:13

Kubernetes備份容器

2022-12-26 07:52:33

DockerfileFROM命令

2022-02-28 15:56:14

零信任企業(yè)

2019-11-05 17:10:19

Java開發(fā)編程語言

2021-06-25 14:50:21

DevSecOps安全 DevOps

2022-11-28 23:48:06

JavaScript編程語言技巧

2020-10-27 06:56:53

IoT產品實踐

2023-10-10 10:57:12

JavaScript代碼優(yōu)化

2025-04-03 11:25:39

2025-03-31 00:00:02

點贊
收藏

51CTO技術棧公眾號

中文久久久久久| 成人免费看片网站| 中国美女黄色一级片| 欧美久久久网站| 亚洲欧洲日韩综合一区二区| 岛国视频一区免费观看| 精品成人无码久久久久久| 久久久久亚洲| 亚洲精品一区二区三区四区高清| 男人舔女人下面高潮视频| 男女啪啪在线观看| 暴力调教一区二区三区| 国产精品一区二区三区免费视频 | 8050国产精品久久久久久| 久久久久久久久久久久| 日韩一区二区三区精品| 91精品福利视频| 日本高清视频免费在线观看| 国产色a在线| 不卡视频在线看| 成人亚洲欧美一区二区三区| 国产精品免费精品一区| 精品福利电影| 超碰精品一区二区三区乱码| 永久免费av无码网站性色av| 日韩精品免费一区二区三区竹菊| 91精品久久久久久久久99蜜臂| 六月激情综合网| xxxx视频在线| 一区二区三区在线不卡| 亚洲看片网站| 福利在线观看| 91老司机福利 在线| 男人添女人下部高潮视频在线观看| 欧美视频二区| 久久香蕉国产线看观看网| 亚洲最大成人网站| 国产精品美女在线观看直播| 欧美一区二区三区色| 嫩草av久久伊人妇女超级a| 老色鬼在线视频| 亚洲国产欧美在线| 国产在线观看欧美| 中文字幕在线观看网站| 成人欧美一区二区三区1314| 亚洲视频在线二区| 日本中文字幕伦在线观看| 国产色婷婷亚洲99精品小说| 免费中文日韩| 激情小视频在线| 久久美女艺术照精彩视频福利播放 | 日本乱码高清不卡字幕| 日韩精品xxxx| 五月天av在线| 色天天综合久久久久综合片| 亚洲精品中文字幕无码蜜桃| 亚洲第一会所| 欧美日韩在线观看一区二区| 五月婷婷六月合| 免费一级a毛片夜夜看| 欧美日韩中字| 中文字幕久热精品在线视频| 人妻无码一区二区三区免费| 欧美大人香蕉在线| 欧美成aaa人片免费看| 一区二区视频免费看| 韩日成人av| 2019中文在线观看| 国产精品51麻豆cm传媒 | 精品国产午夜福利在线观看| 激情不卡一区二区三区视频在线| 日韩一区二区免费在线观看| 成人午夜精品无码区| 日本精品影院| 伊人青青综合网站| 91插插插插插插| 影音先锋一区| 国产精品国产三级国产aⅴ浪潮 | 欧美综合社区国产| 日韩欧美在线1卡| 欧产日产国产精品98| 国产精品片aa在线观看| 久久精品国产欧美激情| 国产精品19乱码一区二区三区| 久久精品免费| 91在线|亚洲| 日韩av免费观影| 国产精品久久久久影院亚瑟| 丰满的少妇愉情hd高清果冻传媒| 国模套图日韩精品一区二区| 欧美精品自拍偷拍动漫精品| 亚洲啪av永久无码精品放毛片 | 肉大捧一出免费观看网站在线播放| www欧美xxxx| 欧美亚洲日本国产| 在线观看亚洲免费视频| 成人精品中文字幕| 久久久久久久激情视频| 日韩 欧美 自拍| 国产色视频一区二区三区qq号| 郴州新闻综合频道在线直播| 欧美国产日韩在线| 日韩中文字幕高清| 成人午夜激情视频| 亚洲乱码国产乱码精品天美传媒| 8x8ⅹ拨牐拨牐拨牐在线观看| 欧美性色综合网| 国产成人精品无码片区在线| 成人免费电影网址| 97超碰蝌蚪网人人做人人爽| av中文字幕第一页| 久久久精品综合| youjizz.com在线观看| 福利视频一区| 精品亚洲男同gayvideo网站| 久久久久成人精品无码| 久久99精品国产91久久来源| 欧美极品一区二区| wwwww亚洲| 91精品婷婷国产综合久久性色| 91视频在线网站| 一级成人国产| 91网免费观看| 国产精品一卡二卡三卡| 欧美在线不卡视频| 亚洲区自拍偷拍| 亚洲一区国产| 国产精品一级久久久| 羞羞的视频在线看| 91精品国产品国语在线不卡| 亚洲一二三四五六区| 老司机久久99久久精品播放免费| 3d蒂法精品啪啪一区二区免费| 欧美成人片在线观看| 麻豆传媒视频在线| 午夜久久电影网| 亚洲免费观看在线| 欧美不卡一区| 亚洲综合中文字幕在线| 黄色一级大片在线免费看产| 欧美日韩一区 二区 三区 久久精品 | 在线观看亚洲天堂| 成人99免费视频| 精品人妻少妇一区二区| 大奶在线精品| 国内精品小视频| 天天干天天摸天天操| 午夜久久久影院| 国产精品伦子伦| 国产精品久久久久久久久久妞妞 | 成人中文在线| 国产精品久久久久99| 国产二区视频在线观看| 欧美午夜精品久久久久久孕妇| 成人小视频免费看| 看片的网站亚洲| 亚洲国产精品女人| 伊人www22综合色| 高清欧美性猛交xxxx黑人猛交| 黄色av网址在线| 欧美日韩一区二区三区| 四虎国产精品成人免费入口| 日本不卡中文字幕| 中文字幕精品—区二区日日骚| 国产成人免费av一区二区午夜 | 久草视频手机在线观看| 成人av中文字幕| 日本一本二本在线观看| 欧美色女视频| 99国产盗摄| 日本不卡免费高清视频在线| 一区二区三区四区视频| 国产精品自产拍| 亚洲妇熟xx妇色黄| 人妻av无码一区二区三区 | 欧美肉大捧一进一出免费视频| 欧美亚洲一区二区三区| 亚洲精品国产精品久久| 免费观看a视频| 日韩美脚连裤袜丝袜在线| 久久国产精品久久久久久久久久| 欧美 日韩 国产 成人 在线 91| 狠狠躁夜夜躁人人爽天天天天97| 国产精品久久久久久成人| 国产麻豆视频一区二区| 亚洲国产精品久久久久婷蜜芽| 久久精品高清| 精品国产免费人成电影在线观...| 日韩漫画puputoon| 欧美激情一区二区三区久久久| 日本亚洲欧美| 91精品中文字幕一区二区三区| 国产一级片毛片| **性色生活片久久毛片| av无码一区二区三区| 久久99国产精品麻豆| 波多野结衣乳巨码无在线| 999久久久亚洲| 久久精品日产第一区二区三区 | 在线免费观看污| 亚洲人成在线观看网站高清| www.爱爱.com| 欧美性色综合网| 少妇一级淫片免费放中国 | 国产99久久| 99久热re在线精品996热视频| 台湾佬成人网| 午夜精品一区二区三区av| 免费看美女视频在线网站| 国产丝袜一区二区三区| wwwav网站| 欧美福利一区二区| 男操女视频网站| 精品久久香蕉国产线看观看gif| 日韩影院一区二区| 国产精品嫩草影院com| 日本黄色特级片| 成人性生交大片| 波多野结衣网页| 老司机免费视频一区二区| 精品国产成人av在线免| 亚洲美女色禁图| 香港三级日本三级a视频| 99精品全国免费观看视频软件| 欧美亚洲精品日韩| 日韩动漫一区| 久久66热这里只有精品| 国产精品欧美大片| 成人欧美视频在线| 日韩大陆av| 成人激情视频小说免费下载| 国产一区二区三区影视| 国产精品国产三级国产专播精品人| 中文字幕在线看片| 欧美在线视频一区二区| 午夜激情电影在线播放| 国产91精品黑色丝袜高跟鞋| 国模精品视频| 97婷婷涩涩精品一区| 成人黄色动漫| 91精品国产91久久久久久久久| 9999在线视频| 5566日本婷婷色中文字幕97| 亚洲插插视频| 日本欧美一级片| 精品成人免费一区二区在线播放| 国产成人精品在线视频| 免费欧美电影| 国产精国产精品| 91福利精品在线观看| 国产精品欧美在线| 91精品亚洲一区在线观看| 国产免费观看久久黄| 欧美天堂在线| 国产欧美 在线欧美| 99精品美女视频在线观看热舞| 亚洲影院色在线观看免费| 亚洲日本视频在线| 国产一区国产精品| 九九久久电影| 一本久道久久综合| 亚洲欧美一级二级三级| 久操网在线观看| 天堂va蜜桃一区二区三区| 久久婷五月综合| 国产一区二区三区在线观看精品| 欧洲成人午夜精品无码区久久| 成年人午夜久久久| 亚洲国产日韩一区无码精品久久久| 国产精品久久久久久久久久久免费看| 日日噜噜夜夜狠狠久久波多野| 亚洲线精品一区二区三区| 毛片基地在线观看| 欧美日韩第一区日日骚| 亚洲国产欧美另类| 亚洲视频免费一区| 老司机午夜在线| 91国语精品自产拍在线观看性色 | 正在播放一区| 在线播放日韩| 在线免费视频a| 国产不卡高清在线观看视频| 国产女主播喷水高潮网红在线| 国产精品久久久久影院亚瑟| 粉嫩aⅴ一区二区三区| 欧美色综合久久| 欧美一级特黄aaaaaa| 在线国产精品播放| 91九色在线看| 国产拍精品一二三| 日韩精品导航| 免费日韩在线观看| 久久久精品网| 国产精品偷伦视频免费观看了| 日本一区二区三级电影在线观看| 久久精品第一页| 欧美日韩一区二区三区高清| 五月激情婷婷网| 欧美成人性色生活仑片| 色婷婷综合久久久中字幕精品久久| 99高清视频有精品视频| 日韩.com| 成人黄色片视频| 成人网在线免费视频| www成人啪啪18软件| 日韩欧美高清视频| 亚洲大尺度网站| 色青青草原桃花久久综合| 欧美另类老肥妇| 91久久精品一区二区别| 日韩av有码| 国产激情在线观看视频| 暴力调教一区二区三区| 青娱乐免费在线视频| 欧美日韩国产在线观看| 日本黄在线观看| 91国语精品自产拍在线观看性色 | av高清一区二区| 色婷婷综合久久久久中文字幕1| 欧美××××黑人××性爽| 国产一区二区三区黄| 欧美理论在线| 久久出品必属精品| 国产精品黄色在线观看| 久操视频在线免费观看| 亚洲美腿欧美激情另类| 九色porny丨国产首页在线| 国产乱码一区| 亚洲第一在线| 精品1卡二卡三卡四卡老狼| 一区二区三区免费看视频| 国产绳艺sm调教室论坛| 日韩视频免费观看| 欧美美女福利视频| 成年人黄色在线观看| 紧缚捆绑精品一区二区| 免费成人深夜蜜桃视频| 欧美天堂一区二区三区| 高清毛片在线看| 国产精品尤物福利片在线观看| 精品视频网站| 另类小说色综合| 中文字幕av资源一区| 中文字幕 自拍偷拍| 最近2019年中文视频免费在线观看| 精品国产欧美日韩一区二区三区| 视频一区二区精品| 老司机午夜精品| 青草影院在线观看| 亚洲第一精品自拍| 中老年在线免费视频| 日韩国产精品一区二区| 蜜乳av一区二区三区| 色偷偷www8888| 日韩一区二区免费在线观看| av资源在线看片| 欧美日韩最好看的视频| 男女男精品视频网| 国产福利视频网站| 欧美va亚洲va| 天堂在线中文网官网| 视频在线一区二区三区| 精品亚洲国内自在自线福利| 免费麻豆国产一区二区三区四区| 亚洲成人激情在线观看| 自拍偷拍欧美视频| 亚洲一区在线免费| 风流少妇一区二区| 日韩精品一区不卡| 久久精品99久久久香蕉| 国产精品18hdxxxⅹ在线| 日韩欧美精品在线观看视频| 国产精品视频在线看| 午夜精品久久久久久久第一页按摩| 国内揄拍国内精品| 成人短片线上看| 欧美一级大片免费看| 欧美日韩亚洲一区二区三区| 日韩精品成人av| 国新精品乱码一区二区三区18| 日韩vs国产vs欧美| 欧美日韩偷拍视频| 亚洲人成亚洲人成在线观看| 久久国际精品| 欧美国产日韩在线播放| 亚洲女爱视频在线| 欧洲亚洲在线| 99re在线观看视频| 日韩vs国产vs欧美| 日韩男人的天堂| 久久精品国产免费观看| 免费欧美一区| av天堂一区二区| 精品视频免费在线| 国产传媒在线| 狠狠干视频网站| 中文字幕精品一区二区精品绿巨人| 亚洲高清精品视频| 91精品国产综合久久香蕉| 先锋影音国产一区|