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

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 依賴管理基礎(chǔ)
問(wèn)題反饋
Gradle 插件
Scala 插件
Gradle 命令行的基本使用
任務(wù)詳述
安裝
概述
教程-雜七雜八
構(gòu)建環(huán)境
依賴管理基礎(chǔ)
使用 Gradle 圖形用戶界面
使用文件
CodeNarc 插件
Sonar 插件
Groovy 插件
Sonar Runner 插件
OSGi 插件
Ear 插件
Gradle 守護(hù)進(jìn)程
Java 插件
簡(jiǎn)介
構(gòu)建基礎(chǔ)
FindBugs 插件
Groovy 快速入門(mén)
JaCoCo 插件
PMD 插件
War 插件
Checkstyle 插件
日志
Java 構(gòu)建入門(mén)
Jetty 插件
從 Gradle 中調(diào)用 Ant
標(biāo)準(zhǔn)的 Gradle 插件
Web 工程構(gòu)建
JDepend 插件
編寫(xiě)構(gòu)建腳本

依賴管理基礎(chǔ)

本章節(jié)介紹如何使用 Gradle 進(jìn)行基本的依賴管理.

什么是依賴管理?

通俗來(lái)講,依賴管理由如下兩部分組成。首先,Gradle 需要知道項(xiàng)目構(gòu)建或運(yùn)行所需要的一些文件,以便于找到這些需要的文件。我們稱這些輸入的文件為項(xiàng)目的依賴。其次,你可能需要構(gòu)建完成后自動(dòng)上傳到某個(gè)地方。我們稱這些輸出為發(fā)布。下面來(lái)仔細(xì)介紹一下這兩部分:

大部分工程都不太可能完全自給自足,一般你都會(huì)用到其他工程的文件。比如我工程需要 Hibernate 就得把它的類庫(kù)加進(jìn)來(lái),比如測(cè)試的時(shí)候可能需要某些額外 jar 包,例如 JDBC 驅(qū)動(dòng)或 Ehcache 之類的 Jar 包。

這些文件就是工程的依賴。Gradle 需要你告訴它工程的依賴是什么,它們?cè)谀?,然后幫你加入?gòu)建中。依賴可能需要去遠(yuǎn)程庫(kù)下載,比如 Maven 或者 Ivy 庫(kù)。也可以是本地庫(kù),甚至可能是另一個(gè)工程。我們稱這個(gè)過(guò)程叫依賴解決。

通常,依賴的自身也有依賴。例如,Hibernate 核心類庫(kù)就依賴于一些其他的類庫(kù)。所以,當(dāng) Gradle 構(gòu)建你的工程時(shí),會(huì)去找到這些依賴。我們稱之為依賴傳遞。

大部分工程構(gòu)建的主要目的是脫離工程使用。例如,生成 jar 包,包括源代碼、文檔等,然后發(fā)布出去。

這些輸出的文件構(gòu)成了項(xiàng)目的發(fā)布內(nèi)容。Gralde 也會(huì)為你分擔(dān)這些工作。你聲明了發(fā)布到到哪,Gradle 就會(huì)發(fā)布到哪。“發(fā)布”的意思就是你想做什么。比如,復(fù)制到某個(gè)目錄,上傳到 Maven 或 Ivy 倉(cāng)庫(kù)。或者在其它項(xiàng)目里使用,這些都可以稱之為發(fā)行

依賴聲明

來(lái)看一下這個(gè)腳本里聲明依賴的部分:

聲明依賴

build.gradle

apply plugin: 'java'
repositories {
    mavenCentral()
}
dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

這是什么意思呢?這段腳本是這么個(gè)意思。首先,Hibernate-core.3.6.7.final.jar 這貨是編譯期必需的依賴。并且這貨相關(guān)的依賴也會(huì)一并被加載進(jìn)來(lái),該段腳本同時(shí)還聲明項(xiàng)目測(cè)試階段需要 4.0 版本以上的 Junit。同時(shí)告訴 Gradle 可以去 Maven 中央倉(cāng)庫(kù)去找這些依賴。下面的章節(jié)會(huì)進(jìn)行更詳細(xì)的描述。

依賴配置

Gradle 中依賴以組的形式來(lái)劃分不同的配置。每個(gè)配置都只是一組指定的依賴。我們稱之為依賴配置 。你也可以借由此聲明外部依賴。后面我們會(huì)了解到,這也可用用來(lái)聲明項(xiàng)目的發(fā)布。

Java 插件定義了許多標(biāo)準(zhǔn)配置項(xiàng)。這些配置項(xiàng)形成了插件本身的 classpath。比如下面羅列的這一些,并且你可以從 Table 23.5,“Java 插件 - 依賴配置”了解到更多詳細(xì)內(nèi)容.。

compile

編譯范圍依賴在所有的 classpath 中可用,同時(shí)它們也會(huì)被打包

runtime

runtime 依賴在運(yùn)行和測(cè)試系統(tǒng)的時(shí)候需要,但在編譯的時(shí)候不需要。比如,你可能在編譯的時(shí)候只需要 JDBC API JAR,而只有在運(yùn)行的時(shí)候才需要 JDBC 驅(qū)動(dòng)實(shí)現(xiàn)

testCompile

測(cè)試期編譯需要的附加依賴

testRuntime

測(cè)試運(yùn)行期需要

不同的插件提供了不同的標(biāo)準(zhǔn)配置,你甚至也可以定義屬于自己的配置項(xiàng)。

外部依賴

依賴的類型有很多種,其中有一種類型稱之為外部依賴。這種依賴由外部構(gòu)建或者在不同的倉(cāng)庫(kù)中,例如 Maven 中央倉(cāng)庫(kù)或 Ivy 倉(cāng)庫(kù)中抑或是本地文件系統(tǒng)的某個(gè)目錄中。

定義外部依賴需要像下面這樣進(jìn)行依賴配置

定義外部依賴

build.gradle

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
}

外部依賴包含 group,name 和 version 幾個(gè)屬性。根據(jù)選取倉(cāng)庫(kù)的不同,group 和 version 也可能是可選的。

當(dāng)然,也有一種更加簡(jiǎn)潔的方式來(lái)聲明外部依賴。采用:將三個(gè)屬性拼接在一起即可。"group:name:version"

快速定義外部依賴

build.gradle

dependencies {
    compile 'org.hibernate:hibernate-core:3.6.7.Final'
}

倉(cāng)庫(kù)

Gradle 是在一個(gè)被稱之為倉(cāng)庫(kù)的地方找尋所需的外部依賴。倉(cāng)庫(kù)即是一個(gè)按 group,name 和 version 規(guī)則進(jìn)行存儲(chǔ)的一些文件。Gradle 可以支持不同的倉(cāng)庫(kù)存儲(chǔ)格式,如 Maven 和 Ivy,并且還提供多種與倉(cāng)庫(kù)進(jìn)行通信的方式,如通過(guò)本地文件系統(tǒng)或 HTTP。

默認(rèn)情況下,Gradle 沒(méi)有定義任何倉(cāng)庫(kù),你需要在使用外部依賴之前至少定義一個(gè)倉(cāng)庫(kù),例如 Maven 中央倉(cāng)庫(kù)。

使用 Maven 中央倉(cāng)庫(kù)

build.gradle

repositories {
    mavenCentral()
}

或者其它遠(yuǎn)程 Maven 倉(cāng)庫(kù):

使用 Maven 遠(yuǎn)程倉(cāng)庫(kù)

build.gradle

repositories {
    maven {
        url "http://repo.mycompany.com/maven2"
    }
}

或者采用 Ivy 遠(yuǎn)程倉(cāng)庫(kù)

采用 Ivy 遠(yuǎn)程倉(cāng)庫(kù)

build.gradle

repositories {
    ivy {
        url "http://repo.mycompany.com/repo"
    }
}

或者在指定本地文件系統(tǒng)構(gòu)建的庫(kù)。

采用本地 Ivy 目錄

build.gradle

repositories {
    ivy {
        // URL can refer to a local directory
        url "../local-repo"
    }
}

一個(gè)項(xiàng)目可以采用多個(gè)庫(kù)。Gradle 會(huì)按照順序從各個(gè)庫(kù)里尋找所需的依賴文件,并且一旦找到第一個(gè)便停止搜索。

了解更多庫(kù)相關(guān)的信息請(qǐng)參閱章節(jié) 50.6,“倉(cāng)庫(kù)”。

打包發(fā)布

依賴配置也被用于發(fā)布文件[3]我們稱之為打包發(fā)布發(fā)布。

插件對(duì)于打包提供了完美的支持,所以通常而言無(wú)需特別告訴 Gradle 需要做什么。但是你需要告訴 Gradle 發(fā)布到哪里。這就需要在 uploadArchives 任務(wù)中添加一個(gè)倉(cāng)庫(kù)。下面的例子是如何發(fā)布到遠(yuǎn)程 Ivy 倉(cāng)庫(kù)的:

發(fā)布到 Ivy 倉(cāng)庫(kù)

build.gradle

uploadArchives {
    repositories {
        ivy {
            credentials {
                username "username"
                password "pw"
            }
            url "http://repo.mycompany.com"
        }
    }
}

執(zhí)行 gradle uploadArchives,Gradle 便會(huì)構(gòu)建并上傳你的 jar 包,同時(shí)會(huì)生成一個(gè) ivy.xml 一起上傳到目標(biāo)倉(cāng)庫(kù)。

當(dāng)然你也可以發(fā)布到 Maven 倉(cāng)庫(kù)中。語(yǔ)法只需稍微一換就可以了。[4]

p.s:發(fā)布到 Maven 倉(cāng)庫(kù)你需要 Maven 插件的支持,當(dāng)然,Gradle 也會(huì)同時(shí)產(chǎn)生 pom.xml 一起上傳到目標(biāo)倉(cāng)庫(kù)。

發(fā)布到 Maven 倉(cāng)庫(kù)

build.gradle

apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost/tmp/myRepo/")
        }
    }
}

下一步目標(biāo)

若對(duì) DSL 感興趣,請(qǐng)看 Project.configurations{},Project.repositories{}Project.dependencies{}

另外,繼續(xù)順著手冊(cè)學(xué)習(xí)其它章節(jié)內(nèi)容吧。~

[3] 這讓人感覺(jué)有點(diǎn)囧,我們正在嘗試逐步分離兩種概念。

[4] 我們也在努力改進(jìn)語(yǔ)法讓發(fā)布到 Maven 倉(cāng)庫(kù)不那么費(fèi)勁。

上一篇:概述