1.1、仓库路径
路径的构建规则与步骤为:
1、groupId的.替换成/
2、后面加上artifactId,同样把.替换成/
3、加上version,后面带上/
4、加上artifactId,分隔符,version,如果有classifier则加上
5、最后加上扩展名
举个例子:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency></pre>
在仓库中的路径就是:org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
http://central.maven.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
1.2、仓库分类
仓库分类如下:
本地仓库
-
远程仓库
中央仓库
私服
其它远程仓库
maven在寻找依赖时,首先在本地仓库查找对应的依赖,如果没有则会从远程仓库查找,如果没有就会报错,其他的远程仓库有JBoss库、Java.net库、阿里云库等等
1.2.1、本地仓库
安装好Maven后不会有本地仓库,只有在执行了第一条命令后才会生成本地仓库
1、本地仓库的路径一般在系统的用户目录下
Windows:系统盘符:\Users\用户名.m2\repository
Linux:/home/${用户名}/.m2/repository,linux中.开头的文件夹是隐藏的,可以用ls -a看到
2、设置本地仓库的目录:在settings.xml下的localRepository节点下设置
<localRepository>D:\maven\repository\</localRepository>
3、本地仓库中的构件的来源
远程仓库下载
本地install
1.2.2、远程仓库
1、当要用到某个构件时,Maven先从本地仓库找,找不到的话才会从远程仓库去寻找,本地仓库只有一个,但是远程仓库可以配置多个
2、maven的默认远程仓库地址可以在lib\maven-model-builder-3.0.jar中的pom-4.0.0.xml中看到,如下
<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>
3、私服:私服是架设在局域网的远程仓库,用于代理Internet上的远程仓库供局域网用户使用,当Maven要下载构件,先从私服请求,如果没有,那么再从远程仓库下载缓存到私服,然后为局域网的用户提供服务,私服具有以下好处:
节省外网带宽
加速Maven的构建
部署第三方构件,因为有的构件不一定能从远程仓库下载到
提高稳定性、增强控制(如nexus有权限控制)
减小中央仓库的负荷
1.2.3、远程仓库的配置
在项目中的pom.xml中可以配置远程仓库
<project>
...
<repositories>
<repository>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
<release>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</release>
<snapshots>
<enabled>false</enabled>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
...
</project>
Maven默认的仓库id为central,如果其他配置了id为central的仓库,那么就会覆盖Maven默认的配置
release和snapshot控制Maven可以是否下载正式版或者快照版本的构件
release和snapshot中还有updatePolicy和checksumPolicy两个属性
updatePolicy:maven检查仓库的更新的频率,默认是daily、其他的选项包括never、always(每次构建都检查)、interval:X (每X分钟检查一次)
checksumPolicy:当maven把构件部署到仓库时,会同时部署校验和文件,当checksumPolicy的值为warn时,Maven在每次构建时会输出警告信息,当为fail时校验和检查失败构建就会失败,ignore那么Maven不会检查校验和
layout为default时表示布局为Maven2/3的,不是1的布局
1.2.4、远程仓库的认证
有的仓库为了安全考虑是需要用户名和密码认证才能访问的,这就需要配置settings.xml
在servers节点下可以配置server属性,如下
<settings>
...
<servers>
<server>
<id>my-repo</id>
<username>username</username>
<password>password</password>
</server>
</servers>
...
</settings>
这里的id是repository节点中需要认证的id,这两个id把这两个配置关联起来
1.2.5、部署至远程仓库
Maven不仅能编译、测试、打包项目,还能将项目打包发布到仓库中,需要编辑pom.xml文件,配置distributionManagement元素节点
<project>
...
<distribution>
<repostiory>
<id>project-release</id>
<name>project release repository</name>
<url>...</url>
</repostiory>
<snapshotRepostiory>
<id>project-snapshot</id>
<name>project snapshot repository</name>
<url>...</url>
</snapshotRepostiory>
</distribution>
...
</project>
distributionManagement节点包含两个子元素:repostiory和snapshotRepostiory,分别表示发行版和快照版本的发布配置,id为仓库的唯一标识,name是为了方便人阅读,url是目标仓库的地址
当仓库需要配置认证的时候,id需要和settings.xml中的server节点下的id对应,如5.2.4节所述
mvn clean deploy
发行版会发到release仓库,而快照版本则会部署到snapshot仓库
1.3、快照版本
版本号后加上-SNAPSHOT表示快照版本,当maven将构件发布到仓库时会给构件打上时间戳,例如1.0-20180908.223910-1表示2018年9月8日22时39分10秒第一次构建,有了时间戳,maven就能获取到最新的版本,当Maven进行构建的时候,会去检查最新的版本,默认是每天检查一次,由
仓库配置中的updatePolicy控制,见5.2.3节,如果想忽略该配置,使用如下命令会在每次构建时都检查更新
mvn clean install -U
1.4、仓库镜像
如果仓库X能提供Y的所有构件,那么X就是Y的一个镜像
可以在settings.xml中配置镜像
<settings>
...
<mirros>
<id>aliyun</id>
<name>aliyun maven repo</name>
<url>{{url}}</url>
<mirrorOf>central</mirrorOf>
</mirros>
...
</settings>
miirorOf配置的是该镜像是哪个仓库的镜像,上面配置的是中央仓库的镜像,所有通过中央仓库的请求都会转到这个镜像中
<mirrorOf>*</mirrorOf>
代表它是所有仓库的镜像
<mirrorOf>external:*</mirrorOf>
匹配除了本地的所有远程仓库
<mirrorOf>repo1,repo2</mirrorOf>
匹配repo1和repo2,用逗号分开
<mirrorOf>*,!repo1</mirrorOf>
匹配除了repo1的所有仓库
1.5、仓库搜索服务
sonatype nexus
jarvana
mvn browser
mvn repository