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

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

簡(jiǎn)要概述依賴(lài)管理

幾乎所有基于JVM的項(xiàng)目都會(huì)或多或少依賴(lài)其他庫(kù),假設(shè)你在開(kāi)發(fā)一個(gè)基于web的項(xiàng)目,你很可能會(huì)依賴(lài)很受歡迎的開(kāi)源框架比如Spring MVC來(lái)提高效率。Java的第三方庫(kù)一般以JAR文件的形式存在,一般用庫(kù)名加版本號(hào)來(lái)標(biāo)識(shí)。隨著開(kāi)發(fā)的進(jìn)行依賴(lài)的第三方庫(kù)增多小的項(xiàng)目變的越來(lái)越大,組織和管理你的JAR文件就很關(guān)鍵。

不算完美的依賴(lài)管理技術(shù)

由于Java語(yǔ)言并沒(méi)提供依賴(lài)管理的工具,所以你的團(tuán)隊(duì)需要自己開(kāi)發(fā)一套存儲(chǔ)和檢索依賴(lài)的想法。你可能會(huì)采取以下幾種常見(jiàn)的方法:

  • 手動(dòng)復(fù)制JAR文件到目標(biāo)機(jī)器,這是最原始的很容易出錯(cuò)的方法。
  • 使用一個(gè)共享的存儲(chǔ)介質(zhì)來(lái)存儲(chǔ)JAR文件(比如共享的網(wǎng)盤(pán)),你可以加載網(wǎng)絡(luò)硬盤(pán)或者通過(guò)FTP檢索二進(jìn)制文件。這種方法需要開(kāi)發(fā)者事先建立好與倉(cāng)庫(kù)的連接,手動(dòng)添加新的依賴(lài)到倉(cāng)庫(kù)中。
  • 把依賴(lài)的JAR文件同源代碼都添加到版本控制系統(tǒng)中。這種方法不需要任何額外的步驟,你的同伴在拷貝倉(cāng)庫(kù)的時(shí)候就能檢索依賴(lài)的改變。另一方面,這些JAR文件占用了不必要的空間,當(dāng)你的項(xiàng)目存在相互之間依賴(lài)的時(shí)候你需要頻繁的check-in的檢查源代碼是否發(fā)生了改變。

自動(dòng)管理依賴(lài)的重要性

盡管上面的方法都能用,但是這距離理想的解決方案差遠(yuǎn)了,因?yàn)樗麄儧](méi)有提供一個(gè)標(biāo)準(zhǔn)化的方法來(lái)命名和管理JAR文件。至少你得需要開(kāi)發(fā)庫(kù)的準(zhǔn)確版本和它依賴(lài)的庫(kù)(傳遞依賴(lài)),這個(gè)為什么這么重要?

準(zhǔn)確知道依賴(lài)的版本

如果在項(xiàng)目中你沒(méi)有準(zhǔn)確聲明依賴(lài)的版本這將會(huì)是一個(gè)噩夢(mèng),如果沒(méi)有文檔你根本無(wú)法知道這個(gè)庫(kù)支持哪些特性,是否升級(jí)一個(gè)庫(kù)到新的版本就變成了一個(gè)猜謎游戲因?yàn)槟悴恢滥愕漠?dāng)前版本。

管理傳遞依賴(lài)

在項(xiàng)目的早期開(kāi)發(fā)階段傳遞依賴(lài)就會(huì)是一個(gè)隱患,這些庫(kù)是第一層的依賴(lài)需要的,比如一個(gè)比較常見(jiàn)的開(kāi)發(fā)方案是將Spring和Hibernate結(jié)合起來(lái)這會(huì)引入超過(guò)20個(gè)其他的開(kāi)發(fā)庫(kù),一個(gè)庫(kù)需要很多其他庫(kù)來(lái)正常工作。下圖展示了Hibernate核心庫(kù)的依賴(lài)圖:

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

如果沒(méi)有正確的管理依賴(lài),你可以會(huì)遇到?jīng)]想到過(guò)的編譯期錯(cuò)誤和運(yùn)行期類(lèi)加載問(wèn)題。我們可以總結(jié)到我們需要一個(gè)更好的方式來(lái)管理依賴(lài),一般來(lái)講你想在項(xiàng)目元數(shù)據(jù)中聲明你的依賴(lài)和它的版本號(hào)。作為一個(gè)項(xiàng)目自動(dòng)化的過(guò)程,這個(gè)版本的庫(kù)會(huì)自動(dòng)從中央倉(cāng)庫(kù)下載、安裝到你的項(xiàng)目中,我們來(lái)看幾個(gè)現(xiàn)有的開(kāi)源解決方案。

使用自動(dòng)化的依賴(lài)管理

在Java領(lǐng)域里支持聲明的自動(dòng)依賴(lài)管理的有兩個(gè)項(xiàng)目:Apache Ivy(Ant項(xiàng)目用的比較多的依賴(lài)管理器)和Maven(在構(gòu)建框架中包含一個(gè)依賴(lài)管理器),我不再詳細(xì)介紹這兩個(gè)的細(xì)節(jié)而是解釋自動(dòng)依賴(lài)管理的概念和機(jī)制。

Ivy和Maven是通過(guò)XML描述文件來(lái)表達(dá)依賴(lài)配置,配置包含兩部分:依賴(lài)的標(biāo)識(shí)加版本號(hào)和中央倉(cāng)庫(kù)的位置(可以是一個(gè)HTTP鏈接),依賴(lài)管理器根據(jù)這個(gè)信息自動(dòng)定位到需要下載的倉(cāng)庫(kù)然后下載到你的機(jī)器中。庫(kù)可以定義傳遞依賴(lài),依賴(lài)管理器足夠聰明分析這個(gè)信息然后解析下載傳遞依賴(lài)。如果出現(xiàn)了依賴(lài)沖突比如上面的Hibernate core的例子,依賴(lài)管理器會(huì)試著解決。庫(kù)一旦被下載就會(huì)存儲(chǔ)在本地的緩存中,構(gòu)建系統(tǒng)先檢查本地緩存中是否存在需要的庫(kù)然后再?gòu)倪h(yuǎn)程倉(cāng)庫(kù)中下載。下圖顯示了依賴(lài)管理的關(guān)鍵元素:

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

Gradle通過(guò)DSL來(lái)描述依賴(lài)配置,實(shí)現(xiàn)了上面描述的架構(gòu)。

自動(dòng)依賴(lài)管理面臨的挑戰(zhàn)

雖然依賴(lài)管理器簡(jiǎn)化了手工的操作,但有時(shí)也會(huì)遇到問(wèn)題。你會(huì)發(fā)現(xiàn)你的依賴(lài)圖中會(huì)依賴(lài)同個(gè)庫(kù)的不同版本,使用日志框架經(jīng)常會(huì)遇到這個(gè)問(wèn)題,依賴(lài)管理器基于一個(gè)特定的解決方案只選擇其中一個(gè)版本來(lái)避免版本沖突。如果你想知道某個(gè)庫(kù)引入了什么版本的傳遞依賴(lài),Gradle提供了一個(gè)非常有用的依賴(lài)報(bào)告來(lái)回答這個(gè)問(wèn)題。下一節(jié)我會(huì)通過(guò)一個(gè)例子來(lái)講解。

上一篇:聲明依賴(lài)下一篇:Gradle包裝器