maven仓库配置

目录

本地仓库(.m2)

远程仓库(联网)

远程仓库(局域网私服)

镜像


本地仓库

1、运行原理
运行Maven的时候,Maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

2、示例说明
你的项目配置了junit-3.8的依赖,在你运行mvn test 的时候,Maven需要使用junit-3.8的jar文件,它首先根据坐标查找本地仓库,如果找到,就直接使用。如果没有,Maven会检查可用的远程仓库配置,然后逐个尝试这些远程仓库去下载junit-3.8的jar文件,如果远程仓库存在该文件,Maven会将其下载到本地仓库中,继而使用。如果尝试过所有远程仓库之后,Maven还是没能够下载到该文件,它就会报错。

3、仓库位置
1. 默认仓库的存储位置:

Maven缺省的本地仓库路径为${user.home}/.m2/repository

 

 

2. 自定义修改仓库的存储位置:

可改变默认的 .m2 目录下的默认本地存储库文件夹
通过修改${user.home}/.m2/settings.xml 配置本地仓库路径 ,没有settings这个xml文件就新建,或者如下复制个;具体看图:

 

 <localRepository>D:\repository</localRepository>

3. 运行时指定本地仓库位置:
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/

还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。


 

远程仓库(联网)

接着了解一下Maven缺省的远程仓库,即Maven中央仓库:
1、运行原理
安装好Maven之后,我们可以建立一个简单的项目,配置一些简单的依赖,然后运行mvn clean install,项目就构建好了。我们没有手工的去下载任何jar文件,这一切都是因为Maven中央仓库的存在,当Maven在本地仓库找不到需要的jar文件时,它会查找远程仓库,而一个原始的Maven安装就自带了一个远程仓库——Maven中央仓库。

2、仓库位置
这个Maven中央仓库是在哪里定义的呢?

  1. maven-2.xxx,可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar;
  2. maven-3.xxx版本之后,在maven可以找到这个文件:/lib/maven-model-builder- ${version}.jar中;

打开该文件,能找到超级POM:\org\apache\maven\model\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:

 1 <repositories>  
 2   <repository>  
 3     <id>central</id>  
 4     <name>Central Repository</name>  
 5     <url>https://repo.maven.apache.org/maven2</url>  
 6     <layout>default</layout>  
 7     <snapshots>  
 8       <enabled>false</enabled>  
 9     </snapshots>  
10   </repository>  
11 </repositories> 

关于远程仓库的配置,下面的我会详细解释,这里我们只要知道,中央仓库的id为central,远程url地址为http://repo.maven.apache.org/maven2,它关闭了snapshot版本构件下载的支持。


 

远程仓库(私服)

在POM中配置远程仓库
前面我们看到超级POM配置了ID为central的远程仓库,我们可以在POM中配置其它的远程仓库。这样做的原因有很多,比如你有一个局域网的远程仓库,使用该仓库能大大提高下载速度,继而提高构建速度,也有可能你依赖的一个jar在central中找不到,它只存在于某个特定的公共仓库,这样你也不得不添加那个远程仓库的配置。

1、pom.xml中配置远程仓库
这里配置一个远程仓库指向中央仓库的中国镜像,需要在你的maven项目pom.xml文件中增加:

 1 <project>  
 2 ...  
 3   <repositories>  
 4     <repository>  
 5       <id>maven-net-cn</id>  
 6       <name>Maven China Mirror</name>  
 7       <url>http://maven.net.cn/content/groups/public/</url>  
 8       <releases>  
 9         <enabled>true</enabled>  
10       </releases>  
11       <snapshots>  
12         <enabled>false</enabled>  
13       </snapshots>  
14     </repository>  
15   </repositories>  
16   <pluginRepositories>  
17     <pluginRepository>  
18       <id>maven-net-cn</id>  
19       <name>Maven China Mirror</name>  
20       <url>http://maven.net.cn/content/groups/public/</url>  
21       <releases>  
22         <enabled>true</enabled>  
23       </releases>  
24       <snapshots>  
25         <enabled>false</enabled>  
26       </snapshots>      
27     </pluginRepository>  
28   </pluginRepositories>  
29 ...  
30 </project>  

1.1 <repositories>讲解:
我们先看一下<repositories>的配置,你可以在它下面添加多个<repository> ,每个<repository>都有它唯一的ID,一个描述性的name,以及最重要的,远程仓库的url。此外,<releases><enabled>true</enabled></releases>告诉Maven可以从这个仓库下载releases版本的构件,而<snapshots><enabled>false</enabled></snapshots>告诉Maven不要从这个仓库下载snapshot版本的构件。禁止从公共仓库下载snapshot构件是推荐的做法,因为这些构件不稳定,且不受你控制,你应该避免使用。当然,如果你想使用局域网内组织内部的仓库,你可以激活snapshot的支持。

1.2 <pluginRepositories>讲解:
至于,这是配置Maven从什么地方下载插件构件(Maven的所有实际行为都由其插件完成)。该元素的内部配置和完全一样,不再解释。


 

使用镜像

需求:

  1. 如果你的地理位置附近有一个速度更快的central镜像;
  2. 你想覆盖central仓库配置;
  3. 你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库)

注: 如果配置了镜像,maven将不再去找中央工厂统一去找镜像地址下载
你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆盖了Maven自带的central:

<settings>  
...  
  <mirrors>  
    <mirror>  
      <id>maven-net-cn</id>  
      <name>Maven China Mirror</name>  
      <url>http://maven.net.cn/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>  
    </mirror>  
  </mirrors>  
...  
</settings> 
备注:
1、在mirrorOf与repositoryId相同的时候优先是使用mirror的地址
2、mirrorOf等于*的时候覆盖所有repository配置
3、存在多个mirror配置的时候mirrorOf等于*放到最后
4、只配置mirrorOf为central的时候可以不用配置repository
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
 3           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
 5   <localRepository>X:\工具\maven资源\repository</localRepository>
 6   <pluginGroups></pluginGroups>
 7   <proxies></proxies>
 8   <servers></servers>
 9   <mirrors>
10     <mirror>
11       <id>nexus-aliyun</id>
12       <name>Nexus aliyun</name>
13       <mirrorOf>central</mirrorOf>
14       <url>http://maven.aliyun.com/nexus/content/groups/public</url>
15     </mirror>
16     <mirror>
17       <id>nexus-mine</id>
18       <name>Nexus mine</name>
19       <mirrorOf>*</mirrorOf>
20       <url>http://xx.xx.xx.xx/nexus/content/groups/public</url>
21     </mirror>
22   </mirrors>
23   <profiles></profiles>
24 </settings>

备注:

nexus-aliyun使用阿里云的镜像作为central中央仓库

nexus-mine作为私服,mirrorOf配置为*来提供中央仓库中不存在的jar包


 

settings.xml配置文件元素说明

1、proxy是服务器不能直接访问外网时需要设置的代理服务,不常用

2、server是服务器要打包上传到私服时,设置私服的鉴权信息

3、repository是服务器下载jar包的仓库地址

4、mirror是用于替代仓库地址的镜像地址

posted @ 2021-02-09 00:01  ^^ITBOY^^  阅读(538)  评论(0编辑  收藏  举报