Maven仓库

​ maven仓库分为本地仓库和远程仓库。远程仓库有中央仓库、私服、其他公共库。

本地仓库

​ 默认情况下,不管是在windows还是linux上,每个用户在自己的用户目录下都有一个路径名为.m2/repository/的仓库目录。用户也可自定义本地仓库目录地址,编辑文件./m2/settings.xml,设置localRepository元素的值为想要的仓库地址。但需要注意,默认情况下,./m2/settings.xml文件是不存在的,需要到安装目录复制./conf/settings.xml文件再进行编辑。

中央仓库

​ 原始的本地仓库是空的,maven必须知道至少一个可用的远程仓库,才能下载到需要的构件。中央仓库就是这样一个默认的远程仓库。maven的安装文件自带了中央仓库的配置。打开./lib/maven-model-builder-3.x..jar,访问路径org/apache/maven/model/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>false</enabled>
      </snapshots>
    </repository>
  </repositories>

​ 此文件是所有maven项目都会继承的超级pom。

私服

​ 即使在一台直接连入internet的个人机器上使用maven,也应该在本地建立私服。因为私服可以帮助你:

  • 节省外网宽度
  • 加速maven构建。maven的一些内部机制(如快照更新检查)要求maven在执行构建的时候不停的检查远程仓库数据。
  • 部署第三方构件。
  • 提高稳定性,增强控制。但internet不稳定时,maven就无法顺利构建。

远程仓库的配置

​ 当默认的中央仓库无法满足需求时,可能需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库。这时,可以在pom中配置该仓库。

<repositories>
    <repository>
      <id>jboss</id>
      <name>JBoss Repository</name>
      <url>https://repository.jboss.com/maven2</url>
      <!-- default表示仓库的布局是maven2和maven3的默认布局,而不是maven1的布局 -->
      <layout>default</layout>
      <releases>
          <!-- 开启JBoss仓库的发布版本下载支持 -->
          <enabled>true</enabled>
      </releases>
      <snapshots>
        <!-- enabled值为false,表示不从该仓库下载快照版本的构件 -->
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

​ 对于releases和snapshots来说,处理enabled,还有两个子元素updatePolicy和checksumPolicy。

<snapshots>
    <enabled>false</enabled>
    <!-- 从远程仓库检查更新的频率,默认daily,表示每天检查一次。never-从不;always-每次构建;interval:X-每隔X分钟检查一次更新。 -->
    <updatePolicy>daily</updatePolicy>
    <!-- 检查检验和文件的策略。构件被部署到maven仓库时,会同时部署对应的校验和文件。下载时,就会验证校验和文件。此处配置检验失败的处理办法。warn-警告;fail-失败;ignore-忽略 -->
    <checksumPolicy>ignore</checksumPolicy>
</snapshots>

远程仓库的认证

​ 出于安全考虑,我们需要提供认证信息才能访问一些远程仓库,这时就需要配置认证信息。认证信息必须配置在settings.xml文件中,因为pom会被提交到代码仓库供所有成员访问,而settings.xml一般只放在本机。更为安全。

<servers>
    <server>
      <!-- 此id必须与要认证的仓库id(pom中repository元素的id)完全一致 -->
      <id>my-repository</id>
      <username>username</username>
      <password>password</password>
    </server>
</servers>

部署到远程仓库

<distributionManagement>
    <!--发布版本的构件仓库 -->
    <repository>
        <id>project-releases</id>
        <name>project releases repository</name>
        <url>http://192.168.40.240:8888/repository/maven-releases/</url>
        <layout>default</layout>
    </repository>
    <!--快照版本的构件仓库,如果没有配置该元素,默认部署到repository元素配置的仓库 -->
    <snapshotRepository>
        <id>project-snapshots</id>
        <name>project snapshots repository</name>
        <url>http://192.168.40.240:8888/repository/maven-snapshots/</url>
        <layout>legacy</layout>
    </snapshotRepository>
</distributionManagement>

​ 运行命令mvn deploy,maven就会项目构件输出到配置的远程仓库,如果项目当前的版本是快照版本,这部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。

快照版本

​ 将项目构件发布到私服时,maven会自动为构件打上时间戳。比如模块A的版本为2.1-SNAPSHOT,发布后2.1-20191212.221414-13就表示2019-12-12 22:14:14的第13次快照。当构建依赖于A的模板B时,maven会自动从仓库中检查A的2.1-SNAPSHOT的最新构件,发现有更新时便进行下载。用户可以使用命令行-U参数强制让maven检查更新,如mvn install-U。

镜像

​ 编辑settings.xml。

<mirrors>
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <!-- central表示为中央仓库的镜像 -->
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

​ 关于镜像的另一个常见用法是结合私服。私服可以代理任何外部的公共仓库。可以将配置集中到私服,从而简化maven本身的配置。这种情况下,可以将mirrorof配置为*,

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

推荐阅读更多精彩内容

  • 在Maven世界中,依赖、插件、项目构建完成后输出的jar包都可以看作是一个构件,任何一个构件都有一组坐标唯一标识...
    SonyaBaby阅读 613评论 0 0
  • 在 Maven 的术语中,仓库是一个位置(place)。Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫...
    41uLove阅读 7,021评论 2 3
  • 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目的...
    三也视界阅读 2,130评论 0 4
  • 1.1、仓库路径 路径的构建规则与步骤为: 1、groupId的.替换成/ 2、后面加上artifactId,同样...
    噢是LJY阅读 876评论 0 1
  • 简介 Maven 可以在某个位置统一存储所有 Maven 项目共享的构件,这个统一的位置就是仓库。实际的 Mave...
    杰哥长得帅阅读 282评论 0 0