maven 仓库地址有如下配置:
pom.xml
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepositories>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
settings.xml
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>nexus-public</id>
<name>Public Repositories</name>
<url>http://192.168.2.126:8081/nexus/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>Public Repositories</name>
<url>http://192.168.2.126:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>
</profile>
首先我们有几个问题:
- 这么多配仓库的地方,配置的是什么仓库?
- 多个仓库使用哪一个,优先级是什么?
第一个问题
配的仓库其实就两种
<repositories>
就一般的远程仓库
<pluginRepositories>
这个是下载插件的仓库
私服和第三方远程仓库都是 远程仓库 只不过私服会缓存下来,方便第二次下载jar包局域网更快
第二个优先级
- 按照
settings.xml
的<repositories>
里的顺序从上往下 -
pom.xml
的<repositories>
优先级是最低的
也就是说你先 使用指定的仓库 直接配置到<repositories>
第一个最快捷,更合理的方式是使用<activeProfiles>
来切换吧
仓库分类
- 本地仓库
- 远程仓库
- 中央仓库
- 私服
- 其它公共仓库
本地仓库 就是本地文件夹配置在settings.xml
里的 <localRepositoryD:\maven_new_repository</localRepository
中央仓库 只得就是maven刚安装好后的maven中央仓库<url>http://repo.maven.apache.org/maven2</url>
远程仓库 通过<repositories> <repository>
配置的就是远程仓库
私服 这是一种特殊的远程仓库,简单来讲就是为了缓存 其它远程仓库的请求
- 减少重复请求造成的外网带宽消耗
- 有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用
- 降低中央仓库的负荷:maven中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力
插件仓库<pluginRepository>
这个是配置插件的下载仓库
学习下repositories配置
<repositories>
<repository>
<id>jboss</id>
<name>JBoss Repository</name>
<url>http://repository.jboss.com/maven2/</url>
<releases>
<updatePolicy>daily</updatePolicy><!-- never,always,interval n -->
<enabled>true</enabled>
<checksumPolicy>warn</checksumPolicy><!-- fail,ignore -->
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<layout>default</layout>
</repository>
</repositories>
<updatePolicy>
元素:表示更新的频率,值有:never, always,interval,daily, daily 为默认值
<checksumPolicy>
元素:表示maven检查和检验文件的策略,warn为默认值
远程仓库的认证配置在
<server>
<id>same with repository id in pom</id>
<username>username</username>
<password>pwd</password>
</server>
注:这里的id必须与POM中需要认证的repository元素的Id一致。
如何将生成的项目部署到远程仓库
完成这项工作,也需要在POM中进行配置,这里有新引入了一个元素:<distributionManagement>
distributionManagement包含了2个子元素:repository
和snapshotRepository
, 前者表示发布版本构件的仓库,后者表示快照版本的仓库
这两个元素都需要配置 id(该远程仓库的唯一标识),name,url(表示该仓库的地址)
向远程仓库中部署构件,需要进行认证。配置同上
maven到底是如何从仓库中解析构件的呢?
- 依赖范围是system的时候->本地文件系统
- 尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功
- 在本地仓库不存在相应的构件情况下,如果依赖的版本是显示的发布版本构件,则遍历所有的远程仓库