5、Maven仓库

1.1、仓库路径

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

1、groupId的.替换成/

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

3、加上version,后面带上/

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

5、最后加上扩展名

举个例子:

<dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
</dependency></pre>

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

<localRepository>D:\maven\repository\</localRepository>

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

  • 远程仓库下载

  • 本地install

1.2.2、远程仓库

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

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

<repositories>
      <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
          <enabled>false</enabled>
        </snapshots>
      </repository>
</repositories>

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

  • 节省外网带宽

  • 加速Maven的构建

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

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

  • 减小中央仓库的负荷

1.2.3、远程仓库的配置

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

<project>
      ...
      <repositories>
          <repository>
              <id>central</id>
              <name>Central Repository</name>
              <url>https://repo.maven.apache.org/maven2</url>
              <release>
               <enabled>true</enabled>
                  <updatePolicy>daily</updatePolicy>
                  <checksumPolicy>ignore</checksumPolicy>
              </release>
              <snapshots>
                  <enabled>false</enabled>
                  <updatePolicy>daily</updatePolicy>
                  <checksumPolicy>ignore</checksumPolicy>
              </snapshots>
              <layout>default</layout>
          </repository>
      </repositories>
      ...
</project> 

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

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

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

1.2.5、部署至远程仓库

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

<project>
    ...
      <distribution>
       <repostiory>
           <id>project-release</id>
              <name>project release repository</name>
              <url>...</url>
          </repostiory>
          <snapshotRepostiory>
           <id>project-snapshot</id>
              <name>project snapshot repository</name>
              <url>...</url>
          </snapshotRepostiory>
      </distribution>
      ...
  </project>

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

<settings>
  ...
    <mirros>
        <id>aliyun</id>
        <name>aliyun maven repo</name>
        <url>{{url}}</url>
        <mirrorOf>central</mirrorOf>
    </mirros> 
  ...    
</settings>

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

<mirrorOf>*</mirrorOf>

代表它是所有仓库的镜像

<mirrorOf>external:*</mirrorOf>

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

<mirrorOf>repo1,repo2</mirrorOf>

匹配repo1和repo2,用逗号分开

<mirrorOf>*,!repo1</mirrorOf>

匹配除了repo1的所有仓库

1.5、仓库搜索服务

  • sonatype nexus

  • jarvana

  • mvn browser

  • mvn repository

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容