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

作者: Joepis | 来源:发表于2017-02-19 20:00 被阅读113次

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

maven坐标

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

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

形如

<groupId>com.company.group</groupId>
<artifactId>MyApp</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>

maven仓库

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

本地仓库

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

<settings>
    <localRepository>D:\repo</localRepository>
</settings>

中央仓库

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

远程仓库

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

<project>  
  ...  
  <repositories>  
    <repository>  
      <id>jboss</id>  
      <name>JBoss Repository</name>  
      <url>http://repository.jboss.com/maven2/</url>  
      <releases>
        <!-- 更新频率never,always,interval,daily -->   
        <updatePolicy>daily</updatePolicy>
          <enabled>true</enabled>
          <!-- 检查和检验文件的策略,fail,warn,ignore -->   
        <checksumPolicy>warn</checksumPolicy>
      </releases>  
    </repository>  
    <snapshots>  
      <enabled>false</enabled>  
    </snapshots>  
    <layout>default</layout>  
  </repositories>  
  ...  
</project>

在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文件如下:

<settings>  
  ...  
  <servers>  
    <server>  
      <id>my-proj</id>  
      <username>repo-user</username>  
      <password>repo-pwd</password>  
    </server>  
  </servers>  
  ...  
</settings> 

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

私服

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

镜像

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

<mirror>  
    <id>nexus-osc</id>  
    <mirrorOf>central</mirrorOf>  
    <name>Nexus osc</name>  
    <url>http://maven.oschina.net/content/groups/public/</url>
</mirror>

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

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

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

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

仓库搜索

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

最后总结:

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

相关文章

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

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

  • Maven学习笔记(四):Maven仓库

    Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库(仓库就是存放依赖和插件的地方...

  • 第5章 总结

    5.1 maven 仓库 1、maven 仓库的类型有哪些? 2、maven 工程查找仓库的流程是什么? 3、本地...

  • Maven之仓库简介

    Maven的仓库分两大类:1.本地仓库 2.远程仓库 1.本地仓库 maven的本地仓库,在安装maven后并不会...

  • jenkins自动发布java代码

    继jenkins笔记(1)进行实战java代码发布,此利用github私有仓库拉去,jenkins利用maven编...

  • 修改中央仓库地址

    1 找到Maven的配置文件 2 修改Maven中央仓库地址 阿里云仓库地址 公司内部仓库地址

  • maven学习笔记

    maven学习笔记 2016年1月6日 一、maven安装 windows下maven安装安装maven前,首先要...

  • spark通过sbt加速编译

    添加maven仓库 1.Resolver.mavenLocal为本地maven仓库,默认路径$HOME/.m22....

  • 2018-09-28:maven 仓库

    maven仓库的概念 1.Maven仓库用于存储jar包、依赖包、插件 2.分类: 1)本地仓库:首次下载不存在,...

  • Maven 仓库管理

    本节主要介绍如何配置 Maven 仓库,发布 jar 包到 Maven 仓库 Maven 仓库是什么? Maven...

网友评论

    本文标题:Maven学习笔记(1) --- 仓库

    本文链接:https://www.haomeiwen.com/subject/jzijwttx.html