转:https://blog.csdn.net/taiyangdao/article/details/52287856

Maven中的库(repository)是构件(artifact)的集合。构件以一定的布局存储在库中。

Maven中的库(repository)可以分为本地库和远程库。本地库在安装Maven的计算机上的指定路径下(通常是用户主目录下的.m2/repository),本地库中的构件往往是远程库中下载到本地的部分构件,被本地项目所引用。当然,本地项目发布时,默认也发布到本地库中。远程库往往是由第三方提供的,用于发布构件供项目下载使用,如著名的Maven central库。

根据构件的用途,构件可以分为两类,一类是被其他构件依赖的构件(dependencies),这也是Maven库中主要的构件。另一类是插件(plugins),这是一种特殊的构件。对于依赖的构件,其所在的库通过<repositories>设置。但是对于插件的构件,由于插件的特殊性,所以插件库独立于依赖库,使用<pluginRepositories>单独设置。但是由于依赖和插件都属于构件,所以<repositories>和<pluginRepositories>中的设置基本一致。

如果一个项目需要依赖一个构件,Maven编译的时候会首先从本地库查找该构件。如果本地库中没有,再根据配置的远程库信息,逐个去远程库中查找该构件。

如果在远程库中找到则下载到本地库,如果在所有的远程库中都没有则会抛出编译异常。

Maven中要配置库,可以有多种方式。最直接的是在项目中的pom.xml文件中,通过<repositories>配置库,这样配置的库仅适用于当前项目。也可以通过<profiles>中的<repositories>配置在特定环境下的特殊库,这可以在项目的pom.xml文件中实现,也可以在Maven的settings.xml中实现。

此外,一个项目发布后,其往往要被部署到一个库中,作为库的构件以供其他项目引用。通过<distributionManagement>中的<repositories>配置要发布的库。

1. 在pom.xml或settings.xml中设置<repositories>,往往需要提供一个<repository>的如下信息:

  • id,库的ID
  • name,库的名称
  • url,库的URL
  • layout,在Maven 2/3中都是default,只有在Maven 1.x中才是legacy
  • releases,库中版本为releases的构件
  • snapshots,库中版本为snapshots的构件

根据构件的版本,可以将构件分为releases类型的构件和snapshots类型的构件。

对于一个构件,其版本的变化是否会引起库中更新该构件呢?则需要根据库的<releases>或<snapshots>设置。<releases>和<snapshots>的设置参数一致,如下所示:

  • enabled,是否支持更新
  • updatePolicy,构件更新的策略,可选值有daily, always, never, interval:X(其中的X是一个数字,表示间隔的时间,单位min),默认为daily
  • checksumPolicy,校验码异常的策略,可选值有ignore, fail, warn

在pom.xml中定义<repository>的示例如下:

  1. <repositories>
  2. <repository>
  3. <releases>
  4. <enabled>false</enabled>
  5. <updatePolicy>always</updatePolicy>
  6. <checksumPolicy>warn</checksumPolicy>
  7. </releases>
  8. <snapshots>
  9. <enabled>true</enabled>
  10. <updatePolicy>never</updatePolicy>
  11. <checksumPolicy>fail</checksumPolicy>
  12. </snapshots>
  13. <id>codehausSnapshots</id>
  14. <name>Codehaus Snapshots</name>
  15. <url>https://repository-master.mulesoft.org/nexus/content/groups/public/</span></url>
  16. <layout>default</layout>
  17. </repository>
  18. </repositories>

2.在pom.xml中的<distributionManagement>,负责管理构件的发布包和其他编译生成的支撑文件。

在<distributionManagement>中也可以配置一个<repository>。这里的<repository>给出的是当前项目部署后所发布的库,示例如下:

  1. <distributionManagement>
  2. <repository>
  3. <uniqueVersion>false</uniqueVersion>
  4. <id>corp1</id>
  5. <name>Corporate Repository</name>
  6. <url>scp://repo/maven2</url>
  7. <layout>default</layout>
  8. </repository>
  9. <snapshotRepository>
  10. <uniqueVersion>true</uniqueVersion>
  11. <id>propSnap</id>
  12. <name>Propellors Snapshots</name>
  13. <url>sftp://propellers.net/maven</url>
  14. <layout>legacy</layout>
  15. </snapshotRepository>
  16. ...
  17. </distributionManagement>

该<repository>的url是当前Maven项目的构件所发布的地址(但是注意,未必是访问该构件的地址)。

<distributionManagement>中还可以配置一个<snapshotRepository>,表示开发过程中的发布库。<snapshotRepository>的设置与<repository>一样。如果没有设置<snapshotRepository>,还可以将<repository>用作<snapshotRepository>。

关于<distributionManagement>的具体用法参见后续文章。

3.在pom.xml或settings.xml中的<profile>中都可以设置<repositories>或<pluginRepositories>,其中的<repository>设置与在<profile>外设置<repositories>中的<repository>一样。

<profile>中的<repositories>表示在该<profile>环境中所特有的库。

(转)Maven中的库(repository)详解 ---repository配置查找构件(如.jar)的远程库的更多相关文章

  1. Maven中的pom.xml详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. 二:Maven中pom.xml元素详解

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6628201.html  一个pom.xml中包含了许多标签,各个标签是对项目生命周期.依赖管理的配置.常用的主 ...

  3. STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) 前面 ...

  4. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  5. 【转】maven核心,pom.xml详解

    感谢如下博主: http://www.cnblogs.com/qq78292959/p/3711501.html maven核心,pom.xml详解 什么是pom?    pom作为项目对象模型.通过 ...

  6. 史上最全的maven的pom.xml文件详解(转载)

    此文出处:史上最全的maven的pom.xml文件详解——阿豪聊干货 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...

  7. Maven全局配置文件settings.xml详解(转)

    Maven全局配置文件settings.xml详解   目录 一.概要 1.settings.xml的作用2.settings.xml文件位置3.配置的优先级 二.settings.xml元素详解 1 ...

  8. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  9. mysql中SQL执行过程详解与用于预处理语句的SQL语法

    mysql中SQL执行过程详解 客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的 ...

随机推荐

  1. Hbuild X 打包 混合式app

    1.调用原生方法的接口文档:http://ask.dcloud.net.cn/docs/ (亲测有效,使用js 调用原生的设备方法是可以的) 2.HbuildX 可以直接真机调试的.(亲测有效,安装好 ...

  2. 怎么更改win7登录界面

    方法/步骤   1 第一步,先打开注册表.快捷键是win+R.Win就是Windows图片那个键.打开会是这个. 2 在其中输入Regedit.就打开了传说中的注册表了.然后在注册表中选择.选择的顺序 ...

  3. python and 用法

    >>> 1 and [] and [1] [] >>> 1 and [2] and [1] [1] >>> 0 and [1] and [2] 0

  4. codeforces gym 100345I Segment Transformations [想法题]

    题意简述 给定一个由A C G T四个字母组成的密码锁(每拨动一次 A变C C变G G变T T变A) 密码锁有n位 规定每次操作可以选取连续的一段拨动1~3次 问最少几次操作可以将初始状态变到末状态 ...

  5. mockito测试入门学习

    一.什么是mock测试,什么是mock对象? 先来看看下面这个示例: 从上图可以看出如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例. 一种替代方案就是使用mocks 从图 ...

  6. 获取header中content-type的值

    后台传过来的值需要根据content-Type的值来判定成功与否 获取header中content-Tyep的值 用res.header['Content-Type']  

  7. Selenium:三种等待方式详解

    我们在做WEB自动化时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要求我们在有些场景下加等待时间. 我们平常用到的有三种等待方式: 强制等待 隐式等待 显示等待 一. ...

  8. VC++DLL动态链接库程序

    VC++DLL动态链接库程序 VC++DLL动态链接库程序 C++ DLL 导出函数 使用VS2017等IDE生成dll程序,示例如下: C++ DLL 导出类 1.导出类中第一种方法:简单导出类(不 ...

  9. LoadRunner内部结构(转)

    LoadRunner内部结构 1,            被测系统是由驱动进程mdrv.exe(多线程驱动的进程)和r3vuser.exe来产生压力的,其中r3vuser.exe仿真应用程序的客户端, ...

  10. FZU 1876 JinYueTuan(排列组合)

    Description Let’s have a look at the picture below Now, do you know what it’s? Yeah , O(∩_∩)O~ , It ...