1.本地仓库
一般来说,在maven项目目录下,没有诸如lib/这样用来存放依赖文件的目录。当maven在执行编译或测试时,如果需要使用依赖文件,它总是介于坐标使用bending仓库的依赖文件。
默认情况下,不管是Window还是在Linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。注意在linux系统,以点(.)开头的文件或目录默认是隐藏的,可以使用 ls -a 显示隐藏文件或目录。
中央仓库
配置如下:
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snaphots>
<enabled>false</enabled>
</snaphots>
</repsository>
</repositories>
包含这段配置的文件是所有Maven项目都会继承超级POM,这段配置使用id central 对中央仓库进行唯一标识,其名称为Maven Repository Switchboard,它使用default仓库布局,而snaphots元素,其子元素enaled为false,表示不从该中央仓库下载快照版本的构件。
私服是一种特殊的远程仓库,它是架设在局域网的仓库服务,私服代理广域网的远程仓库,提供域网内的Maven用户使用。
1.节省自己的外网宽带
2.加速mavne构建
3.部署第三方构件。
4.提供稳定性,增强控制。
5.降低中央仓库的负荷。
远程仓库的配置
<repositories>
<repository>
<id>central</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2</url>
<layout>default</layout>
<snaphots>
<enabled>false</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snaphots>
<releases>
true
</releases>
</repsository>
</repositories>
其中release的enabled值为true,表示开启Jboss仓库的发布版本支持,而snapshots的enabled值为false,表示关闭Jboss仓库的快照版本下载的支持。因此
,根据该配置,Maven只会从Jboss仓库下载发布版本的构件,而不会下载快照版本的构件。
元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值是daily,表示Maven每天检查一次,其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;inteval:X-每隔X分钟检查一次更新(X为任意整数)
元素checksumPolicy用来配置Maven检查校验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件的时候,Maven会验证和文件,如果校验和验证失败,当checksumPolicy的值默认的warn时,Maven会执行构建时输出警告信息,其他的可用值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
远程仓库认证
认证配置一般在settings.xml文件中配置,setting.xml文件一般存放在本地。
<servers>
<server>
<id>my-proj</id> ---远程仓库的id
<username>repo-user</username> ---认证的用户名
<password>repo-pwd</password> ---认证密码
</server>
</servers>
部署至远程仓库
部署需要在项目中的pom.xml文件配置distributionManagement元素
<distributionManagement>
<repository>
<id>pro-releases</id>
<name>Proj Release Repository</name>
<url>http://192.168.1.100/content/repositories/pro-releases</url>
</repsository>
<snapshotRepository>
<id>proj-snapshots</id>
<name>Proj Snapshot Repository</name>
<url>http://192.168.1.100/content/repositories/proj-snapshots</url>
</snapshotRepository>
</distributionManagement>
其中repository为发布的版本构件,snapshotRepository为发布的快照版本构件。
配置正确后,在命定行运行 mvn clean deploy , Maven就会将项目构建输出到构建部署到配置对应的远程仓库。
镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。
配置镜像需要编辑settings.xml文件,代码如下:
<mirrors>
<mirror>
<id>maven.net.cn</id>
<name>one of the central mirrors in China</name>
<url>http://mavne.net.cn/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
该例中http://mavne.net.cn/content/groups/public/为中央仓库的镜像,<mirrorOf>的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库镜像。
关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公告仓库,因此,对于组织内容的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。这这种情况下,任何需要构件都可以从私服获得,私服就是所有仓库的镜像。
<mirrors>
<mirror>
<id>internal-repository</id>
<name>Internal Repository Manager</name>
<url>http://192.168.1.100/maven2</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors
该例中的<mirrorOf>的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至这里。
<mirrorOf>external: * </mirrorOf> : 匹配所有远程仓库,使用localhost的除外。使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。
<mirrorOf> repo1 repo2 </mirrorOf> : 匹配仓库repo和repo2,使用逗号分隔多个远程仓库。
<mirrorOf> *, ! repo1 </mirrorOf> :匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。
下面列举几个maven仓库搜索服务的网站。
Sonatype Nexus
地址: http://repository.sonatype.org/
Nexus是当前最流行的开发Maven仓库管理软件,Nexus提供了关键字搜索、类名搜索、坐标搜索、校验和搜索等工能。
Jarvana
地址:http://www.jarvana.com/jarvana
jarvana 提供了基于关键字,类名的搜索,构建下载、依赖声明片段等功能。
MVNbrowser
地址:http://www.mvnbrowser.com
MVNbrowser只提供关键字搜索的功能,除了提供基于坐标的依赖声明代码片段等基本工能之外,MVNbrowser的一大特色就是,能够告诉用户该构件的依赖与其他哪些构件,以及该构件被哪些其他构件依赖。
MVNrepository
地址:http://mvnrepository.com/
MVNrepository的界面比较清晰,它提供了基于关键字的搜索、依赖声明代码片段、构件下载、依赖与被依赖关系信息、构架所含信息等工能。MVNrepository还能提供一个简单的图表,显示某个构件各版本间大少的变化。