1、maven倉庫
- 在Maven的世界里,任何一個依賴、插件、項目構建的輸出,都可以成為一個構件。如 log4j-1.2.15.jar依賴是一個構件,maven-compile-pligin-2.0.2.jar插件是一個構件,myapp項目構建完后輸出myapp-1.0-SNAPSHOT.war也是一個構件。Maven在某個位置存儲所有maven項目共享的構件,這個位置就稱為倉庫。每一個構件在倉庫中都有一個唯一的坐標。
- maven是基於簡單文件系統存儲的,根據依賴生成的路徑可以在maven倉庫的文件系統找到對應的文件--maven的布局
<dependency>
<groupId>org.testing</groupId>
<artifactId>testng</artifactId>
<version>5.6</version>
<classifier>jdk15</classifier> 注:該項不會出現在依賴申明中,便於舉例寫於此處
<packaging>jar</packaging>
</dependency>
查找構件的步驟:
a、基於groupId准備路徑,將.轉換為/,並在最后添加路徑分隔符 -->org/testing
b、基於artifactId准備路徑,在前面基礎添加artifactId和路徑分隔符 -->org/testing/tesng/
c、使用版本信息,在前面基礎上添加version和路徑分隔符 -->org/testing/tesng/5.6/
d、依次加上artifactId,構建分隔符連字號,以及version -->org/testing/tesng/5.6/tesng-5.6
e、如果有classifier,則添加classifier和 路徑分隔符 -->org/testing/tesng/5.6/tesng-5.6-jdk15
f、添加擴展名 -->org/testing/tesng/5.6/tesng-5.6-jdk15.jar
2、倉庫的分類
對Maven來說,倉庫分為本地倉庫和遠程倉庫。當Maven根據坐標尋找構件的時候,現在本地倉庫查找,找到直接使用,否則去遠程倉庫查找,找到了下載到本地倉庫再使用。如果在本地倉庫和遠程倉庫都沒有找到,maven會報錯。
- 本地倉庫:setting.xml指定本地倉庫的路徑
- 遠程倉庫-中央倉庫:maven的默認遠程倉庫
maven有默認的遠程倉庫的配置,詳見D:\apache-maven-3.5.0\lib\maven-model-builder-3.5.0\org\apache\maven\mode\pom-4.0.0.xml
<repositories>
<repository>
<id>central</id> 中央倉庫的唯一標志
<name>Central Repository</name> 可讀性名稱
<url>https://repo.maven.apache.org/maven2</url> 中央倉庫的地址
<layout>default</layout> 默認布局,1中所示
<snapshots> 快照配置
<enabled>false</enabled> 失能,表示不從中央倉庫下載快照版本的構件
</snapshots>
</repository>
</repositories>
- 遠程倉庫-私服:架設在局域網內的倉庫,代理廣域網上的遠程倉庫,供局域網內的maven用戶使用

私服優勢:
a、節省外網帶寬:減少了大量對遠程倉庫的重復請求
b、加速maven構建:maven內部機制(如快照更新檢查)要求maven執行構建的時候不停地檢查遠程倉庫數據,當配置了很多遠程倉庫時,構建速度會被大大降低。使用私服maven僅需要檢查局域網內私服的數據。
c、部署第三方構件:構件無法從任何遠程倉庫獲取,比如公司內部生成的私有構件,orcale的JDBC由於版權因素無法發布到公共倉庫,建立私服后可以將這些構件發布到私服供大家使用
...
3、遠程倉庫的配置
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy> 更新策略,never-從不檢查更新lalways-每次構建都檢查更新;interval:X-每隔X分鍾檢查一次更新
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
- 遠程倉庫的認證:
大部分遠程倉庫不需要認證,部分出於安全考慮,需要認證
<server>
<id>my-proj</id>
<username>user</username>
<password>passwd</password>
</server>
認證信息必須配置在setting.xml文件中;id元素的值必須與配置的倉庫的id一致
- 部署到遠程倉庫:
發布到遠程倉庫往往需要認證,配置通上。以下配置了穩定版本發布的倉庫和快照版本發布的倉庫:
<distributionManagement>
<repository>
<id>proj-releases</id>
<name>Tesla Releases</name>
<url>http://192.168.1.1/content/repositories/proj-releases</url>
</repository>
<snapshotRepository>
<id>proj-snapshots</id>
<name>Tesla Snapshots</name>
<url>http://192.168.1.1/content/repositories/proj-snapshots</url>
</snapshotRepository>
</distributionManagement>
4、鏡像
如果倉庫A可以提供倉庫B的所有內容,那么可以認為A是B的一個鏡像。比如:http://maven.net.cn/contents/groups/public是中央倉庫http://repol.maven.org/maven2在中國的鏡像,由於地理位置的因素,該鏡像往往能夠提供比中央倉庫更快的服務。因此,可以配置maven使用該鏡像來替代中央倉庫
<mirror>
<id>maven.net.cn</id>
<name>Team Nexus Release Mirror</name>
<mirrorOf>central</mirrorOf> 表示該配置為central中央倉庫的鏡像,任何對中央倉庫的請求都會轉至該鏡像
<url>http://maven.net.cn/contents/groups/public</url>
</mirror>
