关于maven配置本地私服和镜像的流程,网上一大堆,写的神乎其乎,初学者总是很难理解其中的真正原理,
笔者通过这篇文章来终结他们;
setting.xml的结构
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository/>
<interactiveMode/>
<offline/>
<pluginGroups/>
<servers/>
<mirrors/>
<proxies/>
<profiles/>
<activeProfiles/>
</settings>
localRepository: 配置本地存储库的位置,默认为${user.home}/.m2/repository
interactiveMode: 是否与用户开启交互模式,默认为 true
offline: 离线模式,默认为 false
pluginGroups: 比如<pluginGroup>org.eclipse.jetty</pluginGroup>, 默认有org.apache.maven.plugins and org.codehaus.mojo。
servers: 配置私服的用户名和密码
mirrors: mirror相当于一个拦截器,它会拦截maven对remote repository的相关请求,把请求里的remote repository地址,重定向到mirror里配置的地址。
proxies: 代理配置
profiles: 配置环境
activeProfiles: 配置默认激活的环境
配置镜像
因为中央仓库在国外,下载比较慢,所以可以配置为定向到阿里云镜像,阿里云镜像里面一般都很全
<mirror>
<id>Nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
这样访问中央仓库时就会定位到阿里云,不再访问中央仓库。如果阿里云仓库没有呢?怎么办?这种情况一般不会出现,因为阿里云仓库的jar很全
如果你希望如果在阿里云镜像找不到资源时也可以访问问中央仓库,那么阿里云镜像就不能使用<mirrorOf>central</mirrorOf>,可以把阿里云镜像配置成一个私服,
如<mirrorOf>aliyun</mirrorOf>
关于mirrorOf,如果有同名的mirrorOf,那么只会匹配第一个,
如果有<mirrorOf>*</mirrorOf>,优先匹配名字完全相同的,其次匹配通配符
配置profile
<profile>
<id>nexus-mr</id>
<repositories>
<!-- 配置的顺序决定了下载 jar 包的顺序 -->
<!-- maven下载时,按顺序查找,优先找nexus,找不到再找central -->