Maven学习笔记(1) --- 仓库

摘要: 原创出处 http://peijie2016.gitee.io 欢迎转载,保留摘要,谢谢!

maven坐标

maven的构件(jar包)是根据坐标来确定其在仓库的保存位置的。
maven的坐标是通过以下元素来定义的:

  • groupId : 一般是当前项目的公司名和项目组
  • artifactId : 项目名称
  • version : 项目版本
  • packaging : 打包方式,默认是jar,也可以是war
  • classifier : 定义构建输出的一些附属构件,不常用

形如

com.company.group
MyApp
war
0.0.1-SNAPSHOT

maven仓库

顾名思义,仓库就是存放依赖(jar包)的地方。
maven仓库分为本地仓库中央仓库远程仓库,和私服4种。

本地仓库

通俗的说,本地仓库就是我们本地电脑中的一个文件夹,用来存放jar包的仓库。
本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录。
可通过修改maven安装目录下的settings.xml文件来修改本地仓库位置。


    D:\repo

中央仓库

中央仓库是默认的远程仓库,它包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。id是central,url地址是http://repo1.maven.org/maven2

远程仓库

在很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如:JBoss,Maven仓库。这时,可以在POM中配置该仓库,比如:

  
  ...  
    
      
      jboss  
      JBoss Repository  
      http://repository.jboss.com/maven2/  
      
           
        daily
          true
             
        warn
        
      
      
      false  
      
    default  
    
  ...  

在repositories元素下,用repository子元素声明一个或者多个远程仓库。该例中声明了一个id为jboss,名称为JBoss Repository的仓库。任何一个仓库声明的id必须是唯一的,尤其需要注意的是,maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。该配置中的url值指向了仓库的地址,一般来说,该地址都基于http协议,maven用户都可以在浏览器中打开仓库地址浏览构件。
该例配置中的releases和snapshots元素比较重要,它们用来控制Maven对于发布版构件和快照版构件的下载。该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。该例中的layout元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。

远程仓库的认证

远程仓库默认无须认证就可访问,有时出于安全需要,可配置认证访问。
配置认证信息和配置仓库信息不同,仓库信息可以直接配置在POM文件中,但是认证信息必须配置在settings.xml文件中。这是因为POM往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只放在本机。因此,settings.xml中配置认证信息更为安全。
假设为id为my-proj的仓库配置认证信息,编辑settings.xml文件如下:

  
  ...  
    
      
      my-proj  
      repo-user  
      repo-pwd  
      
    
  ...  
 

** 注:settings.xml中server元素的id必须与POM中需要认证的repository元素的id完全一致。 **

私服

私服是架设在局域网的特殊远程仓库。一般maven自己的中央仓库存放了主流的jar包,但是有时候自己的编写的jar包就没办法在中央仓库找到了,这时候就需要配置一个远程仓库,就是所谓的“私服”,就可以将我们自己的jar包存放到远程仓库中,这样当maven需要下载jar包的时候,就可以先请求私服,如果私服上找不到,就会从maven的中央仓库再下载,之后也会缓存在私服上供以后使用。

镜像

这里另外说一下镜像。国内访问国外的仓库,你懂的,所以有必要配置镜像。在maven安装目录下的settings.xml配置文件中,可以配置镜像,在元素中,可配置一个或多个镜像。比如:

  
    nexus-osc  
    central  
    Nexus osc  
    http://maven.oschina.net/content/groups/public/

mirrorOf中写的是哪个仓库的镜像,例子中表明是中央仓库的镜像,这样,一切往中央仓库的请求,都会转发到去请求这个镜像的地址。所以,mirrorOf中不能乱写。
镜像也可以配置基于id的仓库认证。
mirrorOf中可以写*,表示对一切的请求都会转到这个镜像。

** 为了满足复杂的规则,maven支持高级的镜像配置: **

  1. *: 匹配所有仓库
  2. external:*: 匹配所有不在本机上的远程仓库
  3. repo1,repo2: 匹配repo1和repo2,多个仓库用逗号隔开
  4. *,!repo3: 匹配所有仓库,除了repo3

*匹配所有,这个镜像建议放在最后,否则maven循环匹配,匹配到第一个就是,满足,直接就结束了,其他镜像就不生效了。*

仓库搜索

在工作中,我们需要知道摸个依赖的坐标来使用,可以使用仓库搜索。
附上几个常用的搜索地址:

  • https://repository.sonatype.org/
  • http://mvnbrowser.com/
  • http://mvnrepository.com/

最后总结:

在pom中加入依赖声明后,maven会优先根据坐标去我们本地仓库查找,如果找到就用了。如果找不到,就会默认去中央仓库查找,然后下载到本地,然后使用。如果我们配置了私服或者其他远程仓库,就会从远程仓库查找,下载。如果我们有配置对应的镜像,就会从镜像下载使用了。

你可能感兴趣的:(Maven学习笔记(1) --- 仓库)