Maven 包管理和前端的 Webpack 差不多,都有下面的特點:
- 從中央倉庫下載第三方包
- 自動化構建
歷史
以前使用手動編譯 Jar 包,然後再根據 CLASSPATH 去找到對應的類再使用,十分麻煩。
後來出現了 Apache Ant,約定將 Jar 放到 /libs 下去統一編譯。不過這些約定都因人而異,不好管理。
Maven 的出現使得包管理更加方便,會自動幫我們做很多的準備工作,減少配置。
Maven
Maven 有一條原則:約定優於配置。
Maven 除了包管理,還有自動化構建,如自動打包,跑測試等。
Maven 的中央倉庫在這裏:https://mvnrepository.com/。
Maven 會下載包到本地倉庫,以使用緩存,存放目錄爲 ~/.m2
。
包屬性
每個包都有一些屬性來唯一確認這個包的資源路徑。
- groupId 組織
- artifactId 每個功能對於一個包
- version 對於的版本
- scope
- test: 範圍只在 test 相關代碼中有用
- provided: 只在編譯用,運行的時候不使用
- compile: 編譯和運行都用
包衝突
當出現包衝突的時候,如
A -> B -> C0.1
\
D -> C0.2
Maven 會使用 C0.2,而不是 C0.1,因爲 C0.2 更接近 root。
如果要使用 C0.1,可以將 C0.2 排除,或者 A 下面直接引入 C0.1,這樣 C0.1 就會比 C0.2 離 root 更近了