初識 Ivy

1. 什麼是Apache Ivy? html

   Apache Ivy 是一個強大的依賴管理軟件,它支持傳遞性依賴和其餘更多的功能。 mysql

   使用Apache Ivy, 你能夠在xml文件裏定義本身的模塊依賴關係,這個xml 文件就是ivy文件。而後你能夠經過Apache Ivy將你須要的依賴包下載到本地的lib文件夾。 sql

2. 爲何咱們要使用依賴管理器? apache

若是沒有依賴管理,咱們一般有兩種方式來存儲工程的依賴關係:工程的lib文件夾或者直接訪問共享庫 oracle

使用lib文件夾最大的缺點在於若是有多個工程使用相同的依賴,那麼這些依賴可能存在不一樣的地方。並且,咱們常常會看到工程依賴項的修正並無記錄下來,這樣就會有維護問題。 app

若是使用共享庫,問題在於咱們要常常維護工程的依賴項列表。而這項列表並不在build文件中,這也帶來了維護的問題。並且這個解決方案常常要求下載整個庫,除非使用了本身的依賴管理方案 maven

這些解決方案的另外一個主要缺點在於它們並無使用傳遞性依賴。傳遞性依賴就是依賴關係的依賴關係。管理傳遞性依賴只要你聲明你真正須要的依賴,而不是你使用的組件所須要的依賴。這不只僅減輕了你的依賴聲明,並且很大程度提升了工程的可維護性,尤爲是在多項目的環境下。想象一下你開發了一個要使用在其餘幾個工程中使用的組件。在沒有傳遞性依賴的狀況下,那麼每當你的組件須要一個新的依賴關係,你都要去更新全部使用你組件的工程!而這將會須要很多的時間! 工具

3.爲何要使用Apache Ivy? 測試

從Ivy的features 和Apache提供的產品比較裏,你會發現Apache Ivy是當前可用的最好的依賴管理工具之一 ui

4.Apache Ivy 和Apache Maven有什麼不一樣?

 http://ant.apache.org/ivy/m2comparison.html

首先,也是最重要的不一樣之處:它們兩個根本不是同一種工具

Apache Maven 是一種軟件醒目關係的綜合工具,然而Apache Ivy只是一個依賴管理工具,和流行的構建管理工具Apache Ant高度集成。因此更有趣的比較應該是比較Apache Ant+Ivy 和Apache Maven。可是這個已經超出了依賴管理的範圍。

其次,它們兩個有不一樣的思想

Apache Ivy 嚴重依賴一個獨特的概念稱爲配置。在Apache Ivy裏,一個模塊配置是使用或者查看模塊的一種方法。例如,你能夠在你的模塊測試和運行的配置,可是你也能夠有mysql和oracle的配置,或者hibernate和jdbc的配置。在每個配置裏,你能夠聲明什麼樣的組件(jar,war,...)是必需的。一樣在每個配置裏,你也能夠聲明對其餘模塊的依賴,描述你須要什麼樣的依賴配置。這叫作配置映射(configuration mapping),它是一種很是靈活的方法,能夠用來回答咱們常常在軟件開發中所遇到的不少問題。

Apache Maven方面有它們稱爲scope的概念。你能夠聲明一個依賴做爲測試scope的一部分,或者編譯時的scope。而後根據這個scope你能夠獲得依賴組件(每一個模塊一個組件),而這個組件的依賴關係取決於他們的scope。Scope 是預約義的,你不能改變它們。沒法建立一個oracle scope。No way to indicate you need what has been declared to be needed in the runtime scope of your dependency in your compile one. Everything here is written in the marble.

文檔

可以很快上手並使用某個工具,它的文檔是必不可少的。Apache Ivy的參考文檔不少,涵蓋了全部的特性幷包括

不少例子。還提供了一些用新版本Ivy維護的官方教程以及從版本2.0.0-alpha2之後的在線的不一樣版本的文檔。

Apache Maven, 很難清楚的知道什麼能夠被認爲是依賴管理文檔,只有不多的一部分:一些小的入門指南,pom條目指南。即便在能夠免費獲得的maven書裏也沒有很詳細的講解,如何理解依賴管理仍是在於讀者的我的觀點。

衝突管理

衝突管理是依賴管理的重要一部分,當你處理傳遞性依賴時常常會碰到衝突。在這個領域,Apache Ivy讓你作任何你想要的:在某個模塊中使用衝突管理器,在其餘地方,決定你將要獲得哪個版本,...你甚至能夠在須要的時候插入你本身的衝突管理器

Apache Maven的衝突管理至關簡單:獲取最接近的定義?(the principle is to get the nearest definition)。

因此若是你的模塊依賴於foo1.0, 若是你不修改你本身的依賴聲明(dependency declaration),你的任何依賴關係都不會獲得foo1.1. 這種方式也許在某些狀況下可行,可是其餘狀況就很差說了...

靈活性

在Apache Ivy裏,不少東西都是可配置的,還有其餘一些是能夠插入的:依賴解析器,衝突管理,最新修訂策略...

Apache Maven也提供了可插入庫,可是並非不少。此外,哭的配置並無Apache Ivy靈活:沒有庫鏈接,沒法在多個庫裏分離原數據和組件(metadata and artifacts)...

公共存儲庫

Apache Maven 配置使用maven2 存儲庫,其中包含不少模塊(both artifacts and module descriptors).

惟一的問題多是模塊描述符並不老是被檢查過的,因此有些不是很好寫。

Apache Ivy 兼容maven2原數據,默認使用的也是maven2的存儲庫。

然而咱們並不推薦使用這樣的一個公共存儲庫做爲企業構建系統,並且Ivy 自己就提供了不少特性和文檔去構建你本身的企業存儲庫,基於(或者不基於)公共存儲庫已有的數據

相關文章
相關標籤/搜索