在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 聲明依賴
依賴管理實(shí)戰(zhàn)
配置遠(yuǎn)程倉庫
安裝Gradle
簡介
項(xiàng)目自動(dòng)化簡介
配置子項(xiàng)目
Gradle強(qiáng)大的特性
自動(dòng)化測試
簡介
掌握構(gòu)建生命周期
使用命令行操作
構(gòu)建Java項(xiàng)目
管理任務(wù)
構(gòu)建工具
連續(xù)傳遞的特性
用Gradle開發(fā)Web項(xiàng)目
聲明依賴
構(gòu)建塊
簡介
測試Java應(yīng)用
java構(gòu)建工具
為什么選擇Gradle
拆分項(xiàng)目文件
單元測試
多項(xiàng)目打包
Gradle 起步
介紹這個(gè)Gradle項(xiàng)目
簡介
自定義腳本
Gradle包裝器
簡要概述依賴管理
項(xiàng)目模塊化

聲明依賴

DSL配置block dependencies用來給配置添加一個(gè)或多個(gè)依賴,你的項(xiàng)目不僅可以添加外部依賴,下面這張表顯示了Gradle支持的各種不同類型的依賴。

http://wiki.jikexueyuan.com/project/gradleIn-action/images/5-3.png" alt="" />

這一章直接掃外部模塊依賴和文件依賴,我們來看看Gradle APi是怎么表示依賴的。

理解依賴的API表示

每個(gè)Gradle項(xiàng)目都有一個(gè)DependencyHandler的實(shí)例,你可以通過getDependencies()方法來獲取依賴處理器的引用,上表中每一種依賴類型在依賴處理器中都有一個(gè)相對(duì)應(yīng)的方法。每一個(gè)依賴都是Dependency的一個(gè)實(shí)例,group, name, version, 和classifier這幾個(gè)屬性用來標(biāo)識(shí)一個(gè)依賴,下圖清晰的表示了項(xiàng)目(Project)、依賴處理器(DependencyHandler)和依賴三者之間的關(guān)系:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/5-4.png" alt="" />

外部模塊依賴

在Gradle的術(shù)語里,外部庫通常是以JAR文件的形式存在,稱之為外部模塊依賴,代表項(xiàng)目層次外的一個(gè)模塊,這種類型的依賴是通過屬性來唯一的標(biāo)識(shí),接下來我們來介紹每個(gè)屬性的作用。

依賴屬性

當(dāng)依賴管理器從倉庫中查找依賴時(shí),需要通過屬性的結(jié)合來定位,最少需要提供一個(gè)name。

  • group: 這個(gè)屬性用來標(biāo)識(shí)一個(gè)組織、公司或者項(xiàng)目,可以用點(diǎn)號(hào)分隔,Hibernate的group是org.hibernate。
  • name: name屬性唯一的描述了這個(gè)依賴,hibernate的核心庫名稱是hibernate-core。
  • version: 一個(gè)庫可以有很多個(gè)版本,通常會(huì)包含一個(gè)主版本號(hào)和次版本號(hào),比如Hibernate核心庫3.6.3-Final。
  • classifier: 有時(shí)候需要另外一個(gè)屬性來進(jìn)一步的說明,比如說明運(yùn)行時(shí)的環(huán)境,Hibernate核心庫沒有提供classifier。

依賴的寫法

你可以使用下面的語法在項(xiàng)目中聲明依賴:

    dependencies {
        configurationName dependencyNotation1,  dependencyNotation2, ...
    }

你先聲明你要給哪個(gè)配置添加依賴,然后添加依賴列表,你可以用map的形式來注明,你也可以直接用冒號(hào)來分隔屬性,比如這樣的:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/5-5.png" alt="" />

    //聲明外部屬性
    ext.cargoGroup = 'org.codehaus.cargo'
    ext.cargoVersion = '1.3.1'

    dependencies {
        //使用映射聲明依賴
        compile group: cargoGroup, name: 'cargo-core-uberjar',version: cargoVersion
        //用快捷方式來聲明,引用了前面定義的外部屬性
        cargo "$cargoGroup:cargo-ant:$cargoVersion"
    }

如果你項(xiàng)目中依賴比較多,你把一些共同的依賴屬性定義成外部屬性可以簡化build腳本。

Gradle沒有給項(xiàng)目選擇默認(rèn)的倉庫,當(dāng)你沒有配置倉庫的時(shí)候運(yùn)行deployTOLocalTomcat任務(wù)的時(shí)候回出現(xiàn)如下的錯(cuò)誤:

    $ gradle deployToLocalTomcat
    :deployToLocalTomcat FAILED
    FAILURE: Build failed with an exception.

    Where: Build file '/Users/benjamin/gradle-in-action/code/chapter5/cargo-configuration/build.gradle' line: 10

    What went wrong:
    Execution failed for task ':deployToLocalTomcat'.
    > Could not resolve all dependencies for configuration ':cargo'.
        > Could not find group:org.codehaus.cargo, module:cargo-core-uberjar, version:1.3.1.
        Required by:
            :cargo-configuration:unspecified
    > Could not find group:org.codehaus.cargo, module:cargo-ant,version:1.3.1.
        Required by:
        :cargo-configuration:unspecified

到目前為止還沒講到怎么配置不同類型的倉庫,比如你想使用MavenCentral倉庫,添加下面的配置代碼到你的build腳本中:

    repositories {
        mavenCentral()
    }

檢查依賴報(bào)告

當(dāng)你運(yùn)行dependencies任務(wù)時(shí),這個(gè)依賴樹會(huì)打印出來,依賴樹顯示了你build腳本聲明的頂級(jí)依賴和它們的傳遞依賴:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/5-6.png" alt="" /> http://wiki.jikexueyuan.com/project/gradleIn-action/images/5-7.png" alt="" />

仔細(xì)觀察你會(huì)發(fā)現(xiàn)有些傳遞依賴標(biāo)注了*號(hào),表示這個(gè)依賴被忽略了,這是因?yàn)槠渌敿?jí)依賴中也依賴了這個(gè)傳遞的依賴,Gradle會(huì)自動(dòng)分析下載最合適的依賴。

排除傳遞依賴

Gradle允許你完全控制傳遞依賴,你可以選擇排除全部的傳遞依賴也可以排除指定的依賴,假設(shè)你不想使用UberJar傳遞的xml-api的版本而想聲明一個(gè)不同版本,你可以使用exclude方法來排除它:

    dependencies {
        cargo('org.codehaus.cargo:cargo-ant:1.3.1') {
            exclude group: 'xml-apis', module: 'xml-apis'
        }
        cargo 'xml-apis:xml-apis:2.0.2'
    }

exclude屬性值和正常的依賴聲明不太一樣,你只需要聲明group和(或)module,Gradle不允許你只排除指定版本的依賴。

有時(shí)候倉庫中找不到項(xiàng)目依賴的傳遞依賴,這會(huì)導(dǎo)致構(gòu)建失敗,Gradle允許你使用transitive屬性來排除所有的傳遞依賴:

    dependencies {
        cargo('org.codehaus.cargo:cargo-ant:1.3.1') {
        transitive = false
        }
        // 選擇性的聲明一些需要的庫
    }

動(dòng)態(tài)版本聲明

如果你想使用一個(gè)依賴的最新版本,你可以使用latest.integration,比如聲明 Cargo Ant tasks的最新版本,你可以這樣寫 org.codehaus .cargo:cargo-ant:latest-integration,你也可以用一個(gè)+號(hào)來動(dòng)態(tài)的聲明:

    dependencies {
        //依賴最新的1.x版本
        cargo 'org.codehaus.cargo:cargo-ant:1.+'
    }

Gradle的dependencies任務(wù)可以清晰的看到選擇了哪個(gè)版本,這里選擇了1.3.1版本:

    $ gradle –q dependencies
    ------------------------------------------------------------
    Root project
    ------------------------------------------------------------
    Listing 5.4 Excluding a single dependency
    Listing 5.5 Excluding all transitive dependencies
    Listing 5.6 Declaring a dependency on the latest Cargo 1.x version
    Exclusions can be
    declared in a shortcut
    or map notation.
    120 CHAPTER 5 Dependency management
    cargo - Classpath for Cargo Ant tasks.
    \--- org.codehaus.cargo:cargo-ant:1.+ -> 1.3.1
    \--- ...

文件依賴

如果你沒有使用自動(dòng)的依賴管理工具,你可能會(huì)把外部庫作為源代碼的一部分或者保存在本地文件系統(tǒng)中,當(dāng)你想把項(xiàng)目遷移到Gradle的時(shí)候,你不想去重構(gòu),Gradle很簡單就能配置文件依賴。下面這段代碼復(fù)制從Maven中央倉庫解析的依賴到libs/cargo目錄。

    task copyDependenciesToLocalDir(type: Copy) {
        //Gradle提供的語法糖
        from configurations.cargo.asFileTree
        into "${System.properties['user.home']}/libs/cargo"
    }

運(yùn)行這個(gè)任務(wù)之后你就可以在依賴中聲明Cargo庫了,下面這段代碼展示了怎么給cargo配置添加JAR文件依賴:

    dependencies {
        cargo fileTree(dir: "${System.properties['user.home']}/libs/cargo",include: '*.jar')
    }