maven倉庫分類
本地倉庫、遠程倉庫。遠程倉庫又有私服、中央倉庫、其它公共庫。中央倉庫是maven自帶的核心倉庫。
倉庫配置
遠程倉庫可以配置多個,超級pom中定義的中央倉庫
<repositories> <repository> <id>central</id> <name>Central Repository</name> <url>https://repo.maven.apache.org/maven2</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
以下是jboss遠程倉庫配置
<repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <checksumPolicy>warn</checksumPolicy> </snapshots> <layout>default</layout> </repository> </repositories>
layout標簽:使用default倉庫布局,倉庫布局就是構件在倉庫中的存儲路徑,默認的構件倉庫路徑如com\juvenxu\mvnbook\hello-world\1.0-SNAPSHOT。maven2、maven3的布局一樣,maven1和他們不一樣。
<snapshots><enabled>false</enabled></snapshots>:不從該倉庫下載快照版本,即不穩定版本SNAPSHOT。
updatePolicy 從遠程倉庫檢查更新的頻率,默認值為daily,每天更新一次;never,從不檢查;always,每次構建都檢查;interval:X,每間隔X分鍾檢查一次更新。X為任意整數。
checksumPolicy 忽略
maven的setting.xml不支持直接配置repositories和pluginRepositories。所幸maven還提供了profile機制,能讓用戶將倉庫配置放到setting.xml 中的profile里,如下:
<profiles> <profile> <id>nexus</id> <repositories> <repository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <checksumPolicy>warn</checksumPolicy> </snapshots> <layout>default</layout> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>jboss</id> <name>JBoss Repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </releases> <snapshots> <enabled>false</enabled> <checksumPolicy>warn</checksumPolicy> </snapshots> <layout>default</layout> </pluginRepository> </pluginRepositories> </profile> </profiles> <activeProfiles> <activeProfile>nexus</activeProfile> </activeProfiles>
當執行maven構建的時候,激活的profile會將倉庫配置應用到項目中去。
maven會區別對待依賴的遠程倉庫與插件遠程倉庫
插件的倉庫使用pluginRepositories來配置,除了pluginRepositories和pluginRepositorie標簽不同之外,其余所有子元素和配置依賴倉庫完全一樣。
私服不是maven的核心概念,它是一種衍生出來的特殊的maven倉庫。
maven官方區別依賴倉庫和插件倉庫,雖然id、url所有的元素值都相同;nexus的 maven-central 代理倉庫不區別依賴倉庫和插件倉庫,從這里即可以下載普通依賴,也可以下載maven插件。
配置鏡像
settings文件
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
該mirrorOf的值為central,表示該配置為中央倉庫鏡像,任何對於中央倉庫的請求都會轉至此鏡像。
另外三個元素與一般倉庫配置無異,表示該鏡像倉庫的唯一標識符、名稱及地址。
鏡像一個更常見的用法是結合私服。由私服代理外部的公共倉庫,本地配置鏡像至私服如下。
<mirror>
<id>maven-nexus</id>
<name>this is my nexus</name>
<url>http://localhost:8081/repository/maven-nexus/</url>
<mirrorOf>*</mirrorOf>
</mirror>
<mirrorOf>*</mirrorOf> 表示該配置是所有Maven倉庫的鏡像,對於所有遠程倉庫的請求都會被轉移到http://
<mirrorOf>external:*</mirrorOf> 匹配所有遠程倉庫,除localhost、file://協議。
<mirrorOf>repo1,repo2</mirrorOf> 匹配倉庫1和倉庫2
<mirrorOf>*,!repo1</mirrorOf> 匹配所有遠程倉庫,repo1除外。
由於鏡像倉庫完全屏蔽了被鏡像倉庫,當鏡像倉庫不穩定或者停止服務的時候,maven將無法訪問被鏡像倉庫,無法下載構件。
部署構件至遠程倉庫
編輯pom文件
<distributionManagement> <repository> <id></id> <name></name> <url></url> </repository> <snapshotRepository> <id></id> <name></name> <url></url> </snapshotRepository> </distributionManagement>
repository表示發布版本構件的倉庫,后者表示快照版本構件的倉庫。
配置后,在命令行運行mvn clear deploy,如果當前項目是快照版本,就部署到快照版本倉庫,反之部署到發布版本倉庫。
私服、遠程倉庫、鏡像如果需要認證,配置方法都一樣。基於倉庫或鏡像id配置即可。
認證信息必須配置在settings.xml文件中
<servers> <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server> </servers>
這里的id必須和需要認證的倉庫或鏡像的id一樣。
