Maven 仓库管理

本节主要介绍如何配置 Maven 仓库,发布 jar 包到 Maven 仓库

Maven 仓库是什么?

Maven 仓库用来存储绝大部分的开源 Jar 包,当你在 pom.xml 文件中使用 dependency 元素引入某个依赖时,Maven 会自动从仓库内下载相关 Jar 包。

Maven 仓库有哪些

Maven 仓库

本地仓库

本地仓库指的是 ${user_home}/.m2/repository/,Maven 默认会先从本地仓库内寻找所需 Jar 包。如果本地仓库不存在,Maven 才会向远程仓库请求下载,同时缓存到本地仓库。

远程仓库

  • 私服
    为了节省资源,一般是局域网内设置的私有服务器,当本地仓库内不存在 Maven 所需 Jar 包时,会先去私服上下载 Jar 包。
  • 中央仓库
    是 Maven 自带的远程仓库,不需要特殊配置。如果私服上也不存在 Maven 所需 Jar 包,那么就去中央仓库上下载 Jar 包,同时缓存在私服和本地仓库。

配置远程 Maven 仓库

一般情况下,配置远程 Maven 仓库分为两种:配置私服,每家公司都会配置自己的 Maven 私服仓库,这样可以节省流量,提高效率;配置第三方公共库。

配置私服

私服的配置一般是适用某个用户的,那么可以把它存放到 .m2/settings.xml 文件中。

<settings>
  <profiles>
      <profile>
        <id>nexus</id>
        <repositories>
          <repository>
            <id>nexus-releases</id>
            <name>local private releases repository</name>
            <url>${maven release repository url}</url>
            <releases>
              <enabled>true</enabled>
            </releases>
            <snapshots>
              <enabled>false</enabled>
            </snapshots>
          </repository>

          <repository>
            <id>nexus-snapshots</id>
            <name>local private snapshots</name>
            <url>${maven snapshot repository url}</url>
          </repository>
        </repositories>
        
        <pluginRepositories>
          <pluginRepository>
            ......
          </pluginRepository>
        </pluginRepositories>
      </profile>
  </profiles>

  <activeProfiles>
      <activeProfile>nexus</activeProfile>
  </activeProfiles>

  <servers>
    <server>
      <id>nexus-releases</id>
      <username>${username}</username>
      <password>${password}</password>
    </server>
    <server>
      <id>nexus-snapshots</id>
      <username>${username}</username>
      <password>${password}</password>
    </server>
  </servers>
</settings>
  • profile
    是将 repository, pluginRepository, properties, activation 一组元素组合成一个整体来使用,其中 repository 指向某个私服。
  • activeProfiles
    激活 profile
  • server
    是用来配置 repository,pluginRepository 中的用户名和密码,其中 server id = profile repository id。

配置第三方公共库

如果某个 Jar 包在第三方公共库上,该如何配置呢?这种情况多数是针对某个项目的特殊需求,而不具有普遍性,因此将该仓库配置在工程的 pom.xml 文件中。

<project>
......
  <repositories>
    <repository>
      <id>jboss</id>
      <name>JBoss Repository</name>
      <layout>default</layout>
      <url>${jboss repository url}</url>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>
.....
</project>

发布 jar 到远程仓库

我们知道如果想发布 Jar 包的话,需要执行的 Maven 命令是

mvn clean deploy

那么该如何配置将 jar 包发布到哪个仓库里呢?这种情况也是项目可见的,所以只需要在工程的 pom.xml 文件内配置即可。

<project>
    ......
    <distributionManagement>
        <repository>
            <id>nexus-releases</id>
            <name>Nexus Repository</name>
            <url>${release respository url}</url>
        </repository>
        <snapshotRepository>
            <id>nexus-snapshots</id>
            <name>Nexus Repository</name>
            <url>${snapshot repository url}</url>
        </snapshotRepository>
    </distributionManagement>
    ......
</project>

其中对应仓库用户认证信息不应该保存在 pom.xml 文件内,而应该保存在 .m2/setting.xml 中。其中 server id = repository id

<settings>
    ......
    <servers>
        <server>
            <id>nexus-releases</id>
            <username>${username}</username>
            <password>${password}</password>
        </server>
        <server>
            <id>nexus-snapshots</id>
            <username>${username}</username>
            <password>${password}</password>
        </server>
    </servers>
    ......
</settings>

Snapshots vs Releases

一般仓库至少会分为两个,Releases 和 Snapshots。

  • Releases 仓库
    Releases 是稳定版本的仓库,一般只有测试运行稳定的版本才会发布到 Releases 仓库上。该版本一旦发布之后,再次发布将失败,不会覆盖当前版本。
  • Snapshots 仓库
    Snapshots 是快照版本,一般适用于不稳定状态,版本号多以后缀 -SNAPSHOT 结尾。可以多次发布相同的快照版本,会覆盖之前发布的 Jar 包。例如:某个 Jar 当前稳定版本是 1.0.0,那么开发版本应该是 1.0.1-SNAPSHOT。
  • 版本号管理
    如果某 Jar 当前稳定版本是 1.0.0,那么下一个不稳定版本是 1.0.1-SNAPSHOT,待 1.0.1-SNAPSHOT 版本稳定后,再发布稳定版 1.0.1。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,458评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,030评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,879评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,278评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,296评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,019评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,633评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,541评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,068评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,181评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,318评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,991评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,670评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,183评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,302评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,655评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,327评论 2 358

推荐阅读更多精彩内容

  • |-1-更新内容[6.从仓库解析依赖的机制(重要)] 1Maven仓库作用 仓库用来存储所有项目使用到构件,在ma...
    zlcook阅读 6,066评论 0 25
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,680评论 18 139
  • 。。。
    TCat阅读 397评论 0 1
  • 人自出生以来便慢慢走向死亡;生命不过短短数十载犹如白驹过隙,匆匆来匆匆离去,曾经一切犹如过眼云烟一般一去不复还,只...
    夜梦情阅读 137评论 0 0
  • 日复一日,我们往返于住址和工作地点,接触着再熟悉不过的人和事。突然想着要改变了,未来等着我们给它不一样的惊喜,就这...
    陌路留香阅读 135评论 0 1