什么是Maven倉庫
在不用Maven的時候,比如說以前我們用Ant構建項目,在項目目錄下,往往會看到一個名為/lib的子目錄,那里存放著各類第三方依賴jar文件,如log4j.jar,junit.jar等等。
每建立一個項目,你都需要建立這樣的一個/lib目錄,然后復制一對jar文件,這是很明顯的重復。重復永遠是噩夢的起點,多個項目不共用相同的jar文件,不僅會造成磁盤資源的浪費,也使得版本的一致性管理變得困難。
此外,如果你使用版本管理工具,如SVN(你沒有使用版本管理工具?馬上試試SVN吧,它能幫你解決很多頭疼的問題),你需要將大量的jar文件提交到代碼庫里,可是版本管理工具在處理二進制文件方面并不出色。
Maven倉庫就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven項目可以從同一個Maven倉庫中獲取自己所需要的依賴JAR,這節(jié)省了磁盤資源。此外,由于Maven倉庫中所有的JAR都有其自己的坐標,該坐標告訴Maven它的組ID,構件ID,版本,打包方式等等,因此Maven項目可以方便的進行依賴版本管理。你也不在需要提交JAR文件到SCM倉庫中,你可以建立一個組織層次的Maven倉庫,供所有成員使用。
簡言之,Maven倉庫能幫助我們管理構件(主要是JAR)。
在Maven中,任何一個依賴、插件或者項目構建的輸出,都可以稱之為構件。
Maven在某個統(tǒng)一的位置存儲所有項目的共享的構件,這個統(tǒng)一的位置,我們就稱之為倉庫。(倉庫就是存放依賴和插件的地方)
任何的構件都有唯一的坐標,Maven根據這個坐標定義了構件在倉庫中的唯一存儲路徑,
解讀Maven在倉庫中的存儲路徑:
1.基于groupId準備路徑,將句點分隔符轉成路徑分隔符,就是將 "." 轉換成 "/" ; example: org.testng --->org/testng
2.基于artifactId準備路徑,將artifactId連接到后面:org/testng/testng
3.使用version準備路徑,將version連接到后面:org/testng/testng/5.8
4.將artifactId于version以分隔符連字號連接到后面:org/testng/testng/5.8/tesng-5.8
5.判斷如果構件有classifier,就要在 第4項 后增加 分隔符連字號 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5
6.檢查構件的extension,如果extension存在,則加上句點分隔符和extension,而extension是由packing決定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar
到這里我們就明白了Maven 對于構件存儲的細節(jié)。
Maven 倉庫的分類:
maven的倉庫只有兩大類:1.本地倉庫 2.遠程倉庫,在遠程倉庫中又分成了3種:2.1 中央倉庫 2.2 游戲 2.3 其它公共庫
1.本地倉庫,顧名思義,就是Maven在本地存儲構件的地方。
注:maven的本地倉庫,在安裝maven后并不會創(chuàng)建,它是在第一次執(zhí)行maven命令的時候才被創(chuàng)建
maven本地倉庫的默認位置:無論是Windows還是Linux,在用戶的目錄下都有一個.m2/repository/的倉庫目錄,這就是Maven倉庫的默認位置
如何更改maven默認的本地倉庫的位置:這里要引入一個新的元素:localRepository,它是存在于maven的settings.xml文件中
1.1 更改配置用戶范圍的本地倉庫:先在/.m2/目錄下創(chuàng)建settings.xml文件,然后在~/.m2/settings.xml,設置localRepository元素的值為想要的倉庫地址
D:\maven_new_repository