构件:groupId = org.testng、artifactId = testng、version = 5.8、classifier = jdk15、packaging = jar,其对应的路径按如下步骤生成
Maven仓库是基于简单文件系统存储的
仓库分为两类:本地仓库和远程仓库。当Maven根据坐标寻找构件的时候,首先会查看本地仓库,如果本地仓库存在此构件,则直接使用;如果不存在或者需要查看是否有更新的构件版本,Maven就会去远程仓库查找
本地仓库好比书房,需要读书的时候先去书房找,相应的,Maven需要构件的时候先从本地仓库找,远程仓库好比书店,当无法从自己的书房找到需要的书的时候,就回去书店购买后放到书房中,而Maven会从远程仓库下载构件至本地仓库。
每个用户只有一个本地仓库,但可以配置访问很多远程仓库
私服是一种特殊的远程仓库,架设在局域网内的仓库服务,私服代理广域网上的远程仓库,共局域网内的Maven用户使用。当Maven需要下载构件的时候,从私服请求,如果私服上不存在此构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。
即使在一台直接连入Internet的个人机器上使用Maven也应该建立私服,私服的优点如下:
<repositories>
<repository>
<id>jbossid>
<name>JBoss Repositoryname>
<url>http://repository.jboss.com/maven2/url>
<releases>
<enabled>trueenabled>
releases>
<snapshots>
<enabled>falseenabled>
<updatePolicy>dailyupdatePolicy>
<checksumPolicy>ignorechecksumPolicy>
snapshots>
<layout>defaultlayout>
repository>
repositories>
在本机settings.xml中配置认证信息,配置一个id为my-proj的仓库配置认证信息
<settings>
...
<servers>
<server>
<id>my-proj</id>
<username>repo-user</username>
<password>repo-pwd</password>
</server>
</servers>
...
</settings>
可以在POM中使用distributionManagement元素将项目构建部署到远程仓库
<distributionManagement>
<repository>
<id>proj-releasesid>
<name>Proj Releases Repositoryname>
<url>http://192.168.1.100/content/repositories/proj-releasesurl>
repository>
<snapshotRepository>
<id>proj-snapshotsid>
<name>Proj Snapshot Repositoryname>
<url>http://192.168.1.100/content/repositories/proj-snapshotsurl>
snapshotRepository>
distributionManagement>
依赖解析机制可以概括如下:
只有仓库开启了对于发布版本或者快照版本的支持,即
不推荐在依赖中使用LATEST和RELEASE
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像,由于地理位置的原因,镜像往往能够提供比中央仓库更快的服务,下面我们演示配置镜像:编辑settings.xml
<mirrors>
<mirror>
<id>maven.net.cnid>
<name>one of the central mirrors in Chinaname>
<url>http://maven.net.cn/content/groups/publicurl>
<mirrorOf>centralmirrorOf>
mirror>
mirrors>
镜像更为常见的一个用法是结合私服,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像,配置settings.xml文件
<mirrors>
<mirror>
<id>internal-repositoryid>
<name>Internal Repository Managername>
<url>http://193.168.1.100/maven2url>
<mirrorOf>*mirrorOf>
mirror>
mirrors>
为了满足一些复杂的需求,Maven还支持更高级的镜像配置:
由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或停止服务的时候,Maven将无法访问被镜像仓库