(十一)Maven远程仓库的各类配置
1.远程仓库的配置html
在平时的开发中,咱们每每不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许不少,有时候也没法知足咱们项目的需求,可能项目须要的某些构件中央仓库中是没有的,而在其余远程仓库中有,如JBoss Maven仓库。这时,能够在pom.xml中配置该仓库,代码以下:浏览器
1 <!-- 配置远程仓库 --> 2 <repositories> 3 <repository> 4 <id>jboss</id> 5 <name>JBoss Repository</name> 6 <url>http://repository.jboss.com/maven2/</url> 7 <releases> 8 <enabled>true</enabled> 9 <updatePolicy>daily</updatePolicy> 10 </releases> 11 <snapshots> 12 <enabled>false</enabled> 13 <checksumPolicy>warn</checksumPolicy> 14 </snapshots> 15 <layout>default</layout> 16 </repository> 17 </repositories>
repository:在repositories元素下,可使用repository子元素声明一个或者多个远程仓库。安全
id:仓库声明的惟一id,尤为须要注意的是,Maven自带的中央仓库使用的id为central,若是其余仓库声明也使用该id,就会覆盖中央仓库的配置。maven
name:仓库的名称,让咱们直观方便的知道仓库是哪一个,暂时没发现其余太大的含义。布局
url:指向了仓库的地址,通常来讲,该地址都基于http协议,Maven用户均可以在浏览器中打开仓库地址浏览构件。post
releases和snapshots:用来控制Maven对于发布版构件和快照版构件的下载权限。须要注意的是enabled子元素,该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。根据该配置,Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。测试
layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到Maven1的布局。ui
其余:对于releases和snapshots来讲,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。this
元素updatePolicy用来配置Maven从远处仓库检查更新的频率,默认值是daily,表示Maven天天检查一次。其余可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。url
元素checksumPolicy用来配置Maven检查校验和文件的策略。当构建被部署到Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven会验证校验和文件,若是校验和验证失败,当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其余可用的值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven彻底忽略校验和错误。
2.远程仓库的认证
大部分公共的远程仓库无须认证就能够直接访问,但咱们在平时的开发中每每会架设本身的Maven远程仓库,出于安全方面的考虑,咱们须要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不一样,远程仓库能够直接在pom.xml中配置,可是认证信息必须配置在settings.xml文件中。这是由于pom每每是被提交到代码仓库中供全部成员访问的,而settings.xml通常只存在于本机。所以,在settings.xml中配置认证信息更为安全。
1 <settings> 2 2 ... 3 3 <!--配置远程仓库认证信息--> 4 4 <servers> 5 5 <server> 6 6 <id>releases</id> 7 7 <username>admin</username> 8 8 <password>admin123</password> 9 9 </server> 10 10 </servers> 11 11 ... 12 12 </settings>
上面代码咱们配置了一个id为releases的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。认证用户名为admin,认证密码为admin123。这里的关键是id元素,settings.xml中server元素的id必须与pom.xml中须要认证的repository元素的id彻底一致。正是这个id将认证信息与仓库配置联系在了一块儿。
3.部署构件至远程仓库
咱们使用本身的远程仓库的目的就是在远程仓库中部署咱们本身项目的构件以及一些没法从外部仓库直接获取的构件。这样才能在开发时,供其余对团队成员使用。
Maven除了能对项目进行编译、测试、打包以外,还能将项目生成的构件部署到远程仓库中。首先,须要编辑项目的pom.xml文件。配置distributionManagement元素,代码以下:
1 <distributionManagement> 2 <repository> 3 <id>releases</id> 4 <name>public</name> 5 <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url> 6 </repository> 7 <snapshotRepository> 8 <id>snapshots</id> 9 <name>Snapshots</name> 10 <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url> 11 </snapshotRepository> 12 </distributionManagement>
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)构件的仓库,后者表示快照版本(开发测试版本)的仓库。这两个元素都须要配置id、name和url,id为远程仓库的惟一标识,name是为了方便人阅读,关键的url表示该仓库的地址。
往远程仓库部署构件的时候,每每须要认证,配置认证的方式同上。
配置正确后,运行命令mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,若是项目当前的版本是快照版本,则部署到快照版本的仓库地址,不然就部署到发布版本的仓库地址。
快照版本和发布版本的区别请自行上百度查阅资料。
4.配置远程仓库的镜像
若是仓库X能够提供仓库Y存储的全部内容,那么就能够认为X是Y的一个镜像。换句话说,任何一个能够从仓库Y得到的构件,都可以从它的镜像中获取。举个例子,http://maven.oschina.net/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,因为地理位置的因素,该镜像每每可以提供比中央仓库更快的服务。所以,能够配置Maven使用该镜像来替代中央仓库。编辑settings.xml,代码以下:
1 <mirrors> 2 <mirror> 3 <id>maven.oschina.net</id> 4 <name>maven mirror in China</name> 5 <url>http://maven.oschina.net/content/groups/public/</url> 6 <mirrorOf>central</mirrorOf> 7 </mirror> 8 </mirrors>
该例中,mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可使用一样的方法配置其余仓库的镜像。id表示镜像的惟一标识符,name表示镜像的名称,url表示镜像的地址。
关于镜像的一个更为常见的用法是结合私服。因为私服能够代理任何外部的公共仓库(包括中央仓库),所以,对于组织内部的Maven用户来讲,使用一个私服地址就等于使用了全部须要的外部仓库,这能够将配置集中到私服,从而简化Maven自己的配置。在这种状况下,任何须要的构件均可以从私服得到,私服就是全部仓库的镜像。这时,能够配置这样的一个镜像:
1 <!--配置私服镜像--> 2 <mirrors> 3 <mirror> 4 <id>nexus</id> 5 <name>internal nexus repository</name> 6 <url>http://183.238.2.182:8081/nexus/content/groups/public/</url> 7 <mirrorOf>*</mirrorOf> 8 </mirror> 9 </mirrors>
该例中<mirrorOf>的值为星号,表示该配置是全部Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://183.238.2.182:8081/nexus/content/groups/public/。若是该镜像仓库须要认证,则配置一个id为nexus的认证信息便可。
须要注意的是,因为镜像仓库彻底屏蔽了被镜像仓库,当镜像仓库不稳定或者中止服务的时候,Maven仍将没法访问被镜像仓库,于是将没法下载构件。
5.可用的Maven镜像仓库
1 <mirror> 2 <id>repo2</id> 3 <mirrorOf>central</mirrorOf> 4 <name>Human Readable Name for this Mirror.</name> 5 <url>http://repo2.maven.org/maven2/</url> 6 </mirror> 7 8 <mirror> 9 <id>ui</id> 10 <mirrorOf>central</mirrorOf> 11 <name>Human Readable Name for this Mirror.</name> 12 <url>http://uk.maven.org/maven2/</url> 13 </mirror> 14 15 16 <mirror> 17 <id>ibiblio</id> 18 <mirrorOf>central</mirrorOf> 19 <name>Human Readable Name for this Mirror.</name> 20 <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url> 21 </mirror> 22 23 <mirror> 24 <id>jboss-public-repository-group</id> 25 <mirrorOf>central</mirrorOf> 26 <name>JBoss Public Repository Group</name> 27 <url>http://repository.jboss.org/nexus/content/groups/public</url> 28 </mirror> 29 30 <mirror> 31 <id>JBossJBPM</id> 32 <mirrorOf>central</mirrorOf> 33 <name>JBossJBPM Repository</name> 34 <url>https://repository.jboss.org/nexus/content/repositories/releases/</url> 35 </mirror>
上面的仓库通过测试是能够访问的。
6.仓库搜索服务地址
Sonatype Nexus:https://repository.sonatype.org/
MVNrepository:http://mvnrepository.com/
关于依赖的搜索,我的以为这两个是最好用的。