repository就是个仓库,maven里有两种仓库,本地仓库和远程仓库。 远程仓库相当于公共的仓库,大家都能看到。
本地仓库是你本地的缓存副本,只有你看的到,主要起缓存作用。
当你向仓库请求插件或依赖的时候,会先检查本地仓库里是否有。如果有则直接返回,否则会向远程仓库请求,并被缓存到本地仓库。
远程仓库既可以在setting.xml中配置也可以在工程的pom.xml文件里指定。
简单而言,mirror可以拦截对远程仓库的请求,改变对目标仓库的下载地址。 mirror就是镜像,主要提供一个方便地切换远程仓库地址的途径。
当maven需要到的依赖jar包不在本地仓库时,就需要到远程仓库下载,这个时候如果maven的setting.xml中配置了镜像,而且镜像配置的规则中匹配到目标仓库时,maven就直接去镜像中配置的仓库地址进行依赖jar的下载,而不会去其他的地方进行下载。
| 规则 | 说明 |
|---|---|
| 匹配所有远程仓库。 |
| 匹配所有远程仓库,使用localhost的除外,使用file://协议的除外。也就是说,匹配所有不在本机上的远程仓库。 |
| 匹配仓库repo1和repo2,使用逗号分隔多个远程仓库。 |
| 匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中排除。 |
中央仓库
这里使用阿里云公共仓库镜像,这样配置会拦截所有的jar请求,只从阿里云下载jar包
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
公司有自己的私服,怎么办呢
使用镜像拦截,jar包请求先拦截请求阿里云,找不到再去私有仓库服务器
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*,!myrepository</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>myrepository</id>
<url>http://******/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
在公司内部测试,一般需要实时更新到最新的snapshots包
在repository节点增加如下配置,可以保证每次编译都保证可以获取到最新的包。
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
或者
修改打包命令,添加-U参数,如:mvn clean install package -U -DskipTests=true,-U参数的含义是update-snapshots,保证可以更新快照包