1、maven倉庫 在Maven的世界里,任何一個依賴、插件、項目構建的輸出,都可以成為一個構件。如 log4j-1.2.15.jar依賴是一個構件,maven-compile-pligin-2.0.2.jar插件是一個構件,myapp項目構建完後輸出myapp-1.0-SNAPSHOT.war也是 ...
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>