5、Maven仓库

1.1、仓库路径

路径的构建规则与步骤为:

1、groupId的.替换成/

2、后面加上artifactId,同样把.替换成/

3、加上version,后面带上/

4、加上artifactId,分隔符,version,如果有classifier则加上

5、最后加上扩展名

举个例子:


      org.apache.commons
      commons-lang3
      3.1

在仓库中的路径就是: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节点下设置

D:\maven\repository\

3、本地仓库中的构件的来源

  • 远程仓库下载

  • 本地install

1.2.2、远程仓库

1、当要用到某个构件时,Maven先从本地仓库找,找不到的话才会从远程仓库去寻找,本地仓库只有一个,但是远程仓库可以配置多个

2、maven的默认远程仓库地址可以在lib\maven-model-builder-3.0.jar中的pom-4.0.0.xml中看到,如下


      
        central
        Central Repository
        https://repo.maven.apache.org/maven2
        default
        
          false
        
      

3、私服:私服是架设在局域网的远程仓库,用于代理Internet上的远程仓库供局域网用户使用,当Maven要下载构件,先从私服请求,如果没有,那么再从远程仓库下载缓存到私服,然后为局域网的用户提供服务,私服具有以下好处:

  • 节省外网带宽

  • 加速Maven的构建

  • 部署第三方构件,因为有的构件不一定能从远程仓库下载到

  • 提高稳定性、增强控制(如nexus有权限控制)

  • 减小中央仓库的负荷

1.2.3、远程仓库的配置

在项目中的pom.xml中可以配置远程仓库


      ...
      
          
              central
              Central Repository
              https://repo.maven.apache.org/maven2
              
               true
                  daily
                  ignore
              
              
                  false
                  daily
                  ignore
              
              default
          
      
      ...
 

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属性,如下


  ...
    
        
            my-repo
            username
            password
        
    
   ...

这里的id是repository节点中需要认证的id,这两个id把这两个配置关联起来

1.2.5、部署至远程仓库

Maven不仅能编译、测试、打包项目,还能将项目打包发布到仓库中,需要编辑pom.xml文件,配置distributionManagement元素节点


    ...
      
       
           project-release
              project release repository
              ...
          
          
           project-snapshot
              project snapshot repository
              ...
          
      
      ...
  

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中配置镜像


  ...
    
        aliyun
        aliyun maven repo
        {{url}}
        central
     
  ...    

miirorOf配置的是该镜像是哪个仓库的镜像,上面配置的是中央仓库的镜像,所有通过中央仓库的请求都会转到这个镜像中

*

代表它是所有仓库的镜像

external:*

匹配除了本地的所有远程仓库

repo1,repo2

匹配repo1和repo2,用逗号分开

*,!repo1

匹配除了repo1的所有仓库

1.5、仓库搜索服务

  • sonatype nexus

  • jarvana

  • mvn browser

  • mvn repository

你可能感兴趣的:(5、Maven仓库)