1.仓库布局

任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路径,这就是Maven的仓库布局方式

路径与坐标的对应关系为:groupId/artifactId/version/artifactId-version-classifier.packaging。其中groupId是以句点进行分割的。

例如jersey-common-2.22.1.jar,其POM定义如下(版本继承了父POM文件)

<parent>
<groupId>org.glassfish.jersey</groupId>
<artifactId>project</artifactId>
<version>2.22.1</version>
</parent>

<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<packaging>jar</packaging>
<name>jersey-core-common</name>

那么在Maven中它的位置应该是,org/glassfish/jersey/core/jersey-common/2.22.1/jersey-common-2.22.1.jar

2.仓库的分类

Maven仓库分为两类,本地仓库和远程仓库,其中远程仓库又包括中央仓库,私服,其他公共库。

1)本地仓库

默认是在C盘用户名下的.m2\repository下,如C:\Users\XXX\.m2\repository,可以在settings.xml文件中,通过localRepository标签进行修改(默认被注释掉)。

对于依赖本地项目的场景,构建模块时,Install插件的install目标将项目的构建输出文件安装到本地仓库,这样其他依赖了这个构件的模块就可以顺利拿到依赖。

常用mvn clean install

2)远程仓库

中央仓库:由于最原始的本地仓库是空的,Maven必须至少知道一个可用的远程仓库才能找到构件。在$M2_HOME/lib/maven-model-builder-3.3.9.jar定义了默认的远程仓库。

<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>

包含这段配置的文件是所有Maven项目都会继承的超级POM

开发者也可以自己定义远程仓库,假如要将默认的远程仓库设置为JBosss,在模块的POM文件中,作如下定义:

<project>

....

  <repositories>

    <repository>

      <id>jboss</id>

      <name>JBoss Repository</name>

      <url>http://repository.jboss.com/maven2/</url>

      <releases>

        <enabled>true</enabled>

      </releases>

      <snapshots>

        <enabled>false</enabled>

      </snapshots>

      <layout>default</layout>

    </repository>

  </repositories>

....

这个例子中,releases和snapshots元素比较重要,它们用来控制Maven对于发布版构件和快照版构件的下载。

除了enabled,还有updatePolicy和checksumPolicy两个属性。

updatePolicy表示从远程仓库检查更新的频率,默认是daily每天检查一次。可以有:never从不 always每次构建都检查 inverval:X 每隔X分钟检查一次,X为任意正整数

checksumPolicy表示检查检验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件时,Maven会验证校验和文件,如果失败,怎么办?当该值为默认的warn时,只会输出警告信息。其他值:fail 构建失败 ignore 忽略错误信息

3.远程仓库的认证

在settings.xml文件中添加servers节点。

<server>
  <id>deploymentRepo</id>//POM文件中定义的远程仓库ID
  <username>repouser</username>
  <password>repopwd</password>
</server>

4.镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。由于地理位置的关系,有时候镜像可以提供比中央仓库更快的服务。

例如http://maven.net.cn/content/groups/public/是中央仓库http://repo1.maven.org/maven2在中国的镜像,当然跑得比西方快,所以可以用它来替代中央仓库

在settings.xml文件中设置如下配置即可

<mirror>
  <id>myMirror</id>
  <mirrorOf>*</mirrorOf>
  <url>http://localhost:8081/nexus/content/groups/public/</url>
</mirror>

所有下载构件的请求都会被重定位到私服,这样可以限制在线下载构件。

6.部署构件

使用deploy命令可以部署到私服。在工程的pom文件下配置distributionManagement标签

<distributionManagement>
  <repository>
    <id>myrelease</id>
    <name>my release repo</name>
    <url>http://localhost:8081/nexus/content/repositories/releases/</url>
  </repository>
  <snapshotRepository>
    <id>mysnapshot</id>
    <name>my snapshot repo</name>
    <url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>

如果需要鉴权,那么在settings.xml中配置server节点,填上用户名和密码,或者私钥。

Maven笔记(二)仓库的更多相关文章

  1. 实用maven笔记三-仓库

    maven管理依赖的一个很重要的基础在于,其维护了收集大量依赖jar包的仓库. maven的仓库分类为本地仓库和远程仓库. 构件在仓库的路径大致为:groupId/artifactId/version ...

  2. 实用maven笔记二-信息&依赖管理

    目前我经历的公司的主要项目管理工具都是maven,maven除了是一个实用的构建工具外,也是一个功能强大的项目管理工具.其管理功能分为信息管理和依赖管理.通过pom.xml文件实现. 信息管理 信息管 ...

  3. Maven实战读书笔记(二):Maven坐标与仓库

    2.1 Maven坐标 Maven坐标是Maven用来表示一个组件依赖的标示. Maven通过下面几个元素定义坐标:groupId.artifactId.version.packaging.class ...

  4. Gitlab+Jenkins学习之路(十二)之Maven的私有仓库Nexus

    1.什么是Nexus? 在前面进行maven项目的构建中,可以看到在构建的过程中需要安装maven的依赖插件,如图: 而在maven的默认配置中是在官网的中央仓库和第三方的maven仓库进行下载,速度 ...

  5. (十二)maven之nexus仓库的基本用法

    nexus仓库的基本用法 ① 启动nexus. 上一章有提到:https://www.cnblogs.com/NYfor2018/p/9079068.html ② 访问http://localhost ...

  6. maven笔记

      jar间接依赖:  被依赖的jar的范围要设置成compile,因发布会包含test范围依赖的jar包.   建立项目之间的联系:先在pom中设定依赖关系,然后可以引用了    .conf:  C ...

  7. Git 笔记二-Git安装与初始配置

    git 笔记二-Git安装与初始配置 Git的安装 由于我日常生活和工作基本上都是在Windows上,因此此处只说windows上的安装.Windows上的安装和其他程序一样,只需要到http://g ...

  8. maven(项目管理工具系列 maven 总结二)

    ♣maven是什么? ♣maven下载.安装 ♣了解maven仓库 ♣eclipse配置maven ♣创建maven项目 ♣把maven项目转化为web项目 1.maven是什么? Maven是一个项 ...

  9. maven修改本地仓库,远程仓库与中央仓库

    什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如 log4j.jar,junit. ...

  10. eclipse 如何修改maven插件本地仓库jar包默认存储位置

      eclipse 如何修改maven插件本地仓库jar包默认存储位置 CreateTime--2018年4月18日11:04:47 Author:Marydon 1.更改eclipse的maven本 ...

随机推荐

  1. POJ 3159 Candies 差分约束dij

    分析:设每个人的糖果数量是a[i] 最终就是求a[n]-a[1]的最大值 然后给出m个关系 u,v,c 表示a[u]+c>=a[v] 就是a[v]-a[u]<=c 所以对于这种情况,按照u ...

  2. javaweb之servlet 全解

    ①Servlet概述 ⑴什么是Servlet Servlet是JavaWeb的三大组件之一,它属于动态资源.Servlet的作用是处理请求, 服务器会把接收到的请求交给Servlet来处理,在Serv ...

  3. 关于Lua 5.1中的debug.hook和coroutine

    1.debug.hook只hook主线程,在coroutine中不起作用. 2.coroutine.resume之后主线程会挂起,直到协程coroutine.yield返回 3. 对于如下代码 deb ...

  4. POJ3750: 小孩报数问题+一道经典约瑟夫问题(猴子选大王)

    又一次因为一个小错误,POJ上Wrong Answer了无数次..... 在差不多要放弃的时候,发现了这个猥琐的不能再猥琐的bug,改完了提交就AC了,简直无语.... 本题wo采用模拟方法: 1 # ...

  5. Headless MSBuild Support for SSDT (*.sqlproj) Projects [利用msbuild自动化部署 .sqlproj]- 摘自网络

    Update: breaking change: http://sqlproj.com/index.php/2012/10/dacfx-sept-2012-updates-break-headless ...

  6. 高效Linux用户需要了解的命令行技能

    最近在Quora上看到一个问答题目,关于在高效率Linux用户节省时间Tips. 将该题目的回答进行学习总结,加上自己的一些经验,记录如下,方便自己和大家参考. 下面介绍的都是一些命令行工具,这些工具 ...

  7. freemaker分页备忘

    思路:定义一个freemaker宏,接收参数.然后在freemaker页面上import这个文件,把参数传进来在server端渲染. 分页标签:pager.ftl <#-- 自定义的分页指令. ...

  8. Only one database connection at a time is supported

      Only one database connection at a time is supported 在网上找到了2个方法: 1. VSS在使用过程中,尤其是数据迁移的过程中,可能会出现上述情况 ...

  9. JavaScript- The Good Parts CHAPTER 2

    I know it well:I read it in the grammar long ago.—William Shakespeare, The Tragedy(悲剧:灾难:惨案) of Titu ...

  10. Duff and Weight Lifting - 587A

    题目大意:某个人训练举重,他每次可以举起来2^wi的重量,不过这个人比较懒所以他想尽量减少训练的次数,如果所有的训练重量2^a1 +2^a2+....2^ak = 2^x,那么这些重量可以一次性训练( ...