Maven远程仓库的各种配置
1.远程仓库的配置
在平时的开发中,我们往往不会使⽤默认的中央仓库,默认的中央仓库访问的速度⽐较慢,访问的⼈或许很多,有时候也⽆法满⾜我们项⽬的需求,可能项⽬需要的某些构件中央仓库中是没有的,⽽在其他远程仓库中有,如JBoss Maven仓库。这时,可以在l中配置该仓库,代码如下:
1    <!-- 配置远程仓库 -->
2    <repositories>
3        <repository>
4            <id>jboss</id>
5            <name>JBoss Repository</name>
6            <url>repository.jboss/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,就会覆盖中央仓库的配置。
name:仓库的名称,让我们直观⽅便的知道仓库是哪个,暂时没发现其他太⼤的含义。
url:指向了仓库的地址,⼀般来说,该地址都基于http协议,Maven⽤户都可以在浏览器中打开仓库地址浏览构件。
releases和snapshots:⽤来控制Maven对于发布版构件和快照版构件的下载权限。需要注意的是enabled⼦元素,该例中releases的enabled值为true,表⽰开启JBoss仓库的发布版本下载⽀持,⽽snapshots的enabled值为false,表⽰关闭JBoss仓库的快照版本的下载⽀持。根据该配置,Maven只会从JBoss仓库下载发布版的构件,⽽不会下载快照版的构件。
layout:元素值default表⽰仓库的布局是Maven2及Maven3的默认布局,⽽不是Maven1的布局。基本不会⽤到Maven1的布局。
其他:对于releases和snapshots来说,除了enabled,它们还包含另外两个⼦元素updatePolicy和checksumPolicy。
元素updatePolicy⽤来配置Maven从远处仓库检查更新的频率,默认值是daily,表⽰Maven每天检查⼀
次。其他可⽤的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查⼀次更新(X为任意整数)。
元素checksumPolicy⽤来配置Maven检查校验和⽂件的策略。当构建被部署到Maven仓库中时,会同时部署对应的检验和⽂件。在下载构件的时候,Maven会验证校验和⽂件,如果校验和验证失败,当checksumPolicy的值为默认的warn时,Maven会在执⾏构建时输出警告信息,其他可⽤的值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
2.远程仓库的认证
⼤部分公共的远程仓库⽆须认证就可以直接访问,但我们在平时的开发中往往会架设⾃⼰的Maven远程仓库,出于安全⽅⾯的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以直接在l中配置,但是认证信息必须配置在l⽂件中。这是因为pom往往是被提交到代码仓库中供所有成员访问的,⽽l⼀般只存在于本机。因此,在l中配置认证信息更为安全。
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使⽤l⽂件中的servers元
素及其⼦元素server配置仓库认证信息。认证⽤户名为admin,认证密码为admin123。这⾥的关键是id元素,l中server元素的id必须与l中需要认证的repository元素的id完全⼀致。正是这个id将认证信息与仓库配置联系在了⼀起。
3.部署构件⾄远程仓库
我们使⽤⾃⼰的远程仓库的⽬的就是在远程仓库中部署我们⾃⼰项⽬的构件以及⼀些⽆法从外部仓库直接获取的构件。这样才能在开发时,供其他对团队成员使⽤。
Maven除了能对项⽬进⾏编译、测试、打包之外,还能将项⽬⽣成的构件部署到远程仓库中。⾸先,需要编辑项⽬的l⽂件。配置distributionManagement元素,代码如下:
1 <distributionManagement>
2        <repository>
3            <id>releases</id>
4            <name>public</name>
5            <url>59.50.95.66:8081/nexus/content/repositories/releases</url>
6        </repository>
7        <snapshotRepository>
8            <id>snapshots</id>
9            <name>Snapshots</name>
10            <url>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就会将项⽬构建输出的构件部署到配置对应的远程仓
库,如果项⽬当前的版本是快照版本,则部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。
快照版本和发布版本的区别请⾃⾏上百度查阅资料。
maven下载教程
4.配置远程仓库的镜像
1 <mirrors>
2      <mirror>
3      <id>maven.oschina</id>
4      <name>maven mirror in China</name>
5      <url>maven.oschina/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>183.238.2.182:8081/nexus/content/groups/public/</url>
7        <mirrorOf>*</mirrorOf>
8    </mirror>
9 </mirrors>
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停⽌服务的时候,Maven仍将⽆法访问被镜像仓库,因⽽将⽆法下载构件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。