這一 Ant 編譯腳本依賴于外部數據源,這會導致攻擊者能夠將惡意代碼插入最終產品中,或者控制編譯計算機。
Java 開發環境內存在的幾個工具能夠輔助 dependency 管理:Apache Ant 和 Apache Maven 兩種 build system 都包含專門用來幫助管理 dependency 的功能,Apache Ivy 被明確作為 dependency 管理器來部署。盡管這些工具在行為方式上存在差異,但它們都有一種通用的功能,即會自動下載在編譯過程中指定的外部 dependency。這樣一來,兩個不同的開發人員用同一種方式來編譯軟件就容易得多。開發人員只需在編譯文件中存儲 dependency 信息,這意味著每個開發人員和編譯工程師都通過同一種方式來獲得 dependency、編譯代碼以及進行部署,而不需要進行混亂的手動 dependency 管理。以下的例子演示了如何使用 Ivy、Ant 和 Maven 作為編譯過程的一部分來管理外部 dependency。
開發人員用一項 <get> 任務,在一個 Ant 目標中指定了外部 dependency,以檢索由相應 URL 指定的 dependency。這個方法與以下情形在功能上是等效的:開發人員證明每一項外部 dependency 為軟件項目中附帶的一項內容,但卻是非常必要的,因為它可以在執行編譯時自動提取和合并 dependency。
例:以下內容摘自 Ant build.xml 配置文件,這些內容顯示了對某一外部 dependency 的典型引用方式:
<get src="http://people.apache.org/repo/m2-snapshot-repository/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
dest="${maven.repo.local}/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar"
usetimestamp="true" ignoreerrors="true"/>