Maven的座標和依賴是?構件的邏輯表示方式和物理表示方式是?java
1、座標和依賴是任何一個構件在Maven世界中的邏輯表示方式程序員
2、文件是Maven構件的物理表示方式apache
3、Maven經過倉庫來統一管理這些文件windows
那麼,構件是什麼東東?瀏覽器
1、任何一個依賴、插件或者項目構建的輸出,均可以稱爲構件緩存
2、依賴log4j-1.2.15.jar是一個構件服務器
3、插件maven-compiler-plugin-2.0.2.jar是一個構件maven
4、account-email項目構建完成後輸出account-email-1.0.0-SNAPSHOT.jar也是一個構件工具
5、任何一個構件都有一組座標惟一標識佈局
傳統的項目關於jar包的問題?
1、一個工做站上,可能有十幾個項目
2、大部分項目可能都用到log4j,小部分用到Spring Framework,還有另一小部分用到Struts2
3、不少項目都在重複複製jar,形成了磁盤空間的浪費,難於管理,文件複製等操做也會下降構建速度
4、傳統項目每每有一個lib/的目錄,各個項目lib/目錄下的內容存在大量重複
如何解決上面的問題?什麼是Maven的倉庫?
1、得益於座標機制,任何Maven項目使用任何一個構件的方式都是徹底相同的
2、在此基礎上,Maven能夠在某個位置統一存儲全部Maven項目共享的構件,這個統一的位置就是倉庫
3、實際的項目將再也不各自存儲其依賴文件,它們只須要聲明這些依賴的座標
什麼是倉庫的佈局?
1、任何一個構件都有其惟一的座標,根據這個座標能夠定義其在倉庫中的惟一存儲路徑,這即是Maven的倉庫佈局方式
2、例如log4j:log4j:1.2.15這一依賴,其對應的倉庫路徑爲log4j/log4j/1.2.15/log4j-1.2.15.jar
3、其格式就是groupId/artifactId/version/artifactId-version.packaging
Maven倉庫的分類?
Maven倉庫只分爲兩類:本地倉庫和遠程倉庫
Maven尋找構件的機制是?
當Maven根據座標尋找構件的時候,它首先查看本地倉庫,若是本地倉庫存在此構建,則直接使用;若是本地倉庫不存在此構件,或者須要查看是否有更新的構建版本,Maven就會去遠程倉庫查找,發現須要的構件以後,下載到本地倉庫再使用,若是本地倉庫和遠程倉庫都沒有須要的構建,Maven就會報錯
遠程倉庫的分類?
1、中央倉庫是Maven核心自帶的遠程倉庫,它包含了絕大部分開源的構件,在默認配置下,當本地倉庫沒有Maven須要的構件的時候,它就會嘗試從中央倉庫下載
2、私服是另外一種特殊的遠程倉庫,爲了節省帶寬和時間,應該在局域網內假設一個私有的倉庫服務器,用其代理全部外部的遠程倉庫,內部的項目還能部署到私服上供其餘項目使用
3、除了中央倉庫和私服,還有不少其餘公開的遠程倉庫常見的有Java.net Maven庫
(http://download.java.net/maven/2/)和JBoss Maven庫(http://repository.jboss.com/maven2)等
本地倉庫介紹
1、Maven項目目錄沒有諸如lib/這樣用來存放依賴文件的目錄,當執行編譯或測試時,若是須要使用依賴文件,它老是基於座標使用本地倉庫的依賴文件
2、默認狀況下,不論是windows仍是Linux,每一個用戶在本身的用戶目錄下都有一個路徑名爲,m2/repository/的倉庫目錄
3、有些時候想修改倉庫目錄,能夠編輯~/.m2/settings.xml,設置localRepository元素的值,例如:
<settings>
<localRepository>D:\maven\repository</localRepository>
</settins>
遠程倉庫介紹
1、遠程倉庫可有多個,本地倉庫只能有一個
2、當Maven沒法從本地倉庫找到須要的構件的時候,就會從遠程倉庫下載構件至本地倉庫
中央倉庫介紹
1、最原始的本地倉庫是空的,Maven必須知道至少一個可用的遠程倉庫,才能在執行Maven命令的時候下載到須要的構件
2、中央倉庫就是這樣一個默認的遠程倉庫,Maven的安裝文件自帶了中央倉庫的配置
3、使用解壓工具打開jar文件$M2_HOME/lib/maven-model-builder-3.0.jar (在Maven 2 中,jar文件路徑相似於M2_HOME/lib/maven-2.2.1-uber.jar),而後訪問路徑,org/apache/maven/model/pom-4.0.0.xml,能夠看到以下配置:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
對上面配置進行說明:
1、包含這段配置的文件是全部Maven項目都會繼承的超級POM
2、這段配置使用id central對中央倉庫進行惟一標識,名稱爲Maven Repository Switchboard,使用default倉庫佈局,snapshots元素,其子元素enabled的值爲false,表示不從該中央倉庫下載快照版本的構件
中央倉庫的牛X之處
1、中央倉庫包涵了這個世界上絕大多數流行的開源Java構件,以及源碼、做者信息、SCM、信息、許可證信息等,每月這裏都會接受全世界Java程序員大概1億次的訪問
2、中央倉庫包涵了超過2000個開源項目的構件,通常來講,一個簡單的Maven項目所須要的依賴構件都能從中央倉庫下載到
私服是什麼?
私服是一種特殊的遠程倉庫,它是架設在局域網內的倉庫服務,私服代理廣域網上的遠程倉庫,供局域網內的Maven用戶使用
使用私服的流程是?
當Maven須要下載構件的時候,它從私服請求,若是私服上不存在該構件,則從外部的遠程倉庫下載,緩存在私服上以後,再爲Maven的下載請求提供服務
此外,一些沒法從外部倉庫下載到的構建也能從本地倉庫上傳到私服上供你們使用
搭建私服的優點?
1、節省本身的外網帶寬
2、加速Maven構建
3、部署第三方構件
4、提升穩定性,加強控制
5、下降中央倉庫的負荷
配置POM使用JBOSS Maven倉庫
在不少狀況下,默認的中央倉庫沒法知足項目的需求,可能項目須要的構件存在於另一個遠程倉庫中,如JBoss Maven倉庫
<project>
...
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<enable>true</enable>
</releases>
<snapshots>
<enabled>false</enable>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
...
</project>
對上面的配置說明:
1、在repositories元素下,可使用repository子元素聲明一個或者多個遠程倉庫。該例中聲明瞭一個id爲jboss,名稱爲JBoss Repository的倉庫
2、任何一個倉庫聲明的id必須是惟一的,尤爲須要注意的是,Maven自帶的中央倉庫使用的id爲central,若是其餘的倉庫聲明也使用該id,就會覆蓋中央倉庫的配置
3、該配置中的url指向了倉庫的地址,通常來講該地址是基於http協議,Maven用戶均可以在瀏覽器中打開倉庫地址瀏覽構件
4、重要的releases和snapshots元素的配置,該配置中releases的enabled值爲true,表示開啓JBoss倉庫的發佈版本下載支持,而snapshots的enabled值爲false,表示關閉JBoss倉庫的快照版本的下載支持,所以,在該配置中Maven只會從JBoss倉庫下載發佈版的構件,而不會下載快照版的構件
releases和snapshots下的另外兩個子元素updatePolicy和checksumPolicy
你可能會遇到下面這樣的配置:
<snapshots>
<enable>true</enable>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
關於updatePolicy的配置
元素updatePolicy用來配置Maven從遠程倉庫檢查更新的頻率,默認的值是daily,表示Maven天天檢查一次
其餘可用的值包括:never——從不檢查更新;always——每次構件都檢查更新;interval:X——每隔X分組檢查一次更新 (X爲任意整數)
關於checksumPolicy的配置
元素checksumPolicy用來配置Maven檢查檢驗和文件的策略。當構件被部署到Maven倉庫中時,會同時部署對應的校驗和文件,在下載構件的時候,Maven會驗證校驗和文件
那麼,若是校驗失敗怎麼辦?
當checksumPolicy的值爲默認的warn時,Maven會在執行構建時輸出警告信息,其餘可用的值包括:fail-Maven遇到校驗和錯誤就讓構建失敗;ignore——使Maven徹底忽略校驗和錯誤