這一 Maven 編譯腳本依賴于外部數據源,這會導致攻擊者能夠將惡意代碼插入最終產品中,或者控制編譯計算機。
Java 開發環境內存在的幾個工具能夠輔助 dependency 管理:Apache Ant 和 Apache Maven 兩種 build system 都包含專門用來幫助管理 dependency 的功能,Apache Ivy 被明確作為 dependency 管理器來部署。盡管這些工具在行為方式上存在差異,但它們都有一種通用的功能,即會自動下載在編譯過程中指定的外部 dependency。這樣一來,兩個不同的開發人員用同一種方式來編譯軟件就容易得多。開發人員只需在編譯文件中存儲 dependency 信息,這意味著每個開發人員和編譯工程師都通過同一種方式來獲得 dependency、編譯代碼以及進行部署,而不需要進行混亂的手動 dependency 管理。以下的例子演示了如何使用 Ivy、Ant 和 Maven 作為編譯過程的一部分來管理外部 dependency。
采用 Maven 時,開發人員將具體指定 dependency 的名稱和版本,而不是列出從中檢索 dependency 的顯式 URL,Maven 依靠其底層配置來識別要從中檢索 dependency 的服務器。通用組件使得開發人員不必花時間探查 dependency 的具體位置。
例 1:以下內容摘自 Maven pom.xml 文件,這些內容顯示了開發人員如何用名稱和版本來指定多個外部 dependency:
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
...
</dependencies>