1、Maven的仓库

Maven中任何一个依赖、插件或者项目构建的输出,都可以成为构件。任何一个构件都有一组坐标唯一标识。一个工作站上可能有几十个Maven项目,得益于坐标机制,任何Maven项目使用任何构件的方式都是完全相同的。再次基础上,Maven可以在某个位置存储所有Maven共享项目的构件,这个统一的位置就是仓库。在Maven项目中不再各自存储其依赖文件,只需要声明依赖的坐标,在需要的时候(编译项目的时候需要将依赖加入到classpath中),Maven会自动根据坐标找到仓库的构件并使用。

2、仓库的布局

任何一个构件都有其唯一的坐标,根据这个坐标定义其在仓库里的唯一存储路径。例如log4j:log4j:1.2.15这个依赖,其对应的仓库路径为log4j/log4j/1.2.15/log4j-1.2.15.jar。坐标的大致对应关系为groupId/artifactId/version/artifactId-version.packaging。

3、仓库的分类

对于Maven来说仓库分为两类:本地仓库和远程仓库。中央仓库是Maven自带的远程仓库,它包含了大部分开源的构件。在默认情况下,本地仓库没有Maven需要的构件的时候,他就会尝试从中央仓库下载。

私服是另外一种特殊的仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有的外部的远程仓库,内部的项目还能部署到私服上供别的项目使用。

除了中央服务器和私服,还有其他许多公开的远程仓库,如java.net Maven库(http://download.java.net/maven/2/)和JBoss Maven库(http://repository.jboss.com/maven2/)等。

1、本地仓库

默认情况下Maven的本地仓库是在~/.m2/repository,如果因为C盘空间不够想要自定义了仓库的位置。可以编辑~/m2/settings.xml:

<settings><localRepository>...</localRepository>
</settings>

这样就可以更改本地仓库的地址。

一个构件只有在本地仓库中之后才可以被其他Maven项目使用。将项目安装到本地仓库中可以用指令:

mvn clean install

2、远程仓库

当Maven无法从本地仓库找到相应的构件时,就会从远程仓库下载构件到本地仓库。一个用户只有一个本地仓库,但是可以配置多个远程仓库。

3、中央仓库

最原始的本地仓库是空的,Maven的安装文件中自带了中央仓库的配置。在Maven的安装目录下的/lib/maven-model-builder-XX.jar的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>

配置了默认的中央仓库,所有的Maven项目都会继承这个POM,所以都会有这个配置。

4、私服

私服是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网用户使用。当Maven需要下载构件的时候,他从私服请求,如果私服不存在当前构件,则从外部的远程仓库缓存到私服上之后再为Maven的下载请求提供服务,此外一些无法从外部仓库下载到的构件也可以手工上传到私服上供大家使用。

4、远程仓库的配置

很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库,可以在POM进行配置:

<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></repository></repositories>

该配置中releases和snapshots使用来控制发布版本和快照版本的下载。这个配置表示允许下载发布版本,关闭JBoss仓库的快照版本的下载支持。根据该配置,Maven只会从JBoss仓库中下载发布版本的构件不会下载快照版本的构件。除了enabled之外还有updatePolicy和checksumPolicy:

<snapshots><enabled>false</enabled><checksumPolicy>ignore</checksumPolicy><updatePolicy>daily</updatePolicy>
</snapshots>

元素updatePolicy表示Maven从远程仓库的更新频率包括:daily、never、always、interval:x 每隔X分钟检查一次更新

checksumPolicy表示Maven检查检验和文件的策略。包括warn:构建时输出警告信息 fail:直接构建失败 ignore:忽略

1、远程仓库的认证

有些远程仓库基于安全的考虑需要提供认证信息才可以访问。配置认证信息需要在settings.xml文件中配置:

<server><id>deploymentRepo</id><username>repouser</username><password>repopwd</password>
</server>

2、部署到远程仓库

Maven除了对项目进行编译,测试和打包之外,还能将项目部署到仓库中,首先编辑POM文件添加distributionManagementy元素:

<distributionManagement><repository><id>proj-releases</id><name>Proj Releases Repository</name><url>http://192.168.1.100/content/repositories/proj-releases</url></repository><snapshotRepository><id>proj-snapshots</id><name>Proj Snapshots Repository</name><url>http://192.168.1.100/content/repositories/proj-snapshots</url>
</snapshotRepository>

然后如果需要认证需要根据上面的配置进行认证。

5、镜像

如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的镜像。配置如下:

  <mirrors><mirror><id>mirrorId</id><mirrorOf>repositoryId</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://my.repository.com/repo/path</url></mirror></mirrors>

其中mirrorOf对应被镜像的仓库ID。如果为* 表示该配置是所有Maven仓库的镜像。对于任何仓库的请求都会被转移到这个配置。

  • * :匹配所有的仓库
  • external:*:匹配所有的远程仓库,使用localhost的除外,使用file://的除外。
  • repo1,repo2:匹配仓库repo1和repo2,使用逗号分隔多个仓库。
  • *,!repo1 :匹配所有的远程仓库除了repo1。

需要注意的是由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务时,Maven将无法访问被镜像仓库。

Maven的仓库(转载自Maven实战 作者许晓斌)相关推荐

  1. pom文件依赖范围(来自Maven实战(书籍)-许晓斌)

    compile:编译依赖范围.如果没有指定,就会默认使用该依赖范围.使用此依赖范围的Maven依赖,对于编译.测试.运行三种classpath都有效.典型的例子是spring-core,在编译.测试和 ...

  2. 配置Maven镜像仓库,国内Maven镜像仓库,Maven中央仓库,国内Maven仓库大全的配置笔记记录

    前言 在以前博主每次遇到环境变更时,博主就要大费周折的去整理以下Maven项目的 settings.xml 配置文件,什么镜像地址啦,仓库地址啦等等,很是浪费时间,在这儿记录哈,以便下次直接复制粘贴即 ...

  3. maven 公用仓库_各种Maven公共仓库

    1.maven包查询: http://mvnrepository.com/ 2.maven公共仓库: http://mirrors.ibiblio.org/pub/mirrors/maven2/ ht ...

  4. maven远程仓库和镜像

    转 maven远程仓库和镜像 http://blog.csdn.net/zyxnetxz/article/details/5709196 http://www.blogjava.net/baoyaer ...

  5. 如何发布Android Library到maven私有仓库

    前言 在我们的项目架构中,一定存在一些基础的模块,这些模块可以在多个app上通用,这种情况我们一般会将这些模块封装成Android Library统一维护,并上传到仓库方便其他小组使用.仓库可以选择如 ...

  6. 个人开源项目如何上传maven中央仓库

    最近在写一些开源项目,想把自己写的东西放到maven中央仓库,提供给更多的人使用.所以写这一篇文章,记录一下自研开源项目jar包上传同步maven中央仓库成功的整个过程,这其中还是有不少的坑的. 一. ...

  7. 0 Maven中央仓库爬取技术与内网本地Maven中央仓库的建立与使用(引言)【力图解决一个非常蛋疼的问题】

    随着国产化CPU与操作系统的"流行",美中不足的就是没一个国产化的开发语言(呵呵),开源的Java开发也就如火如荼的开展起来.其实在互联网上开发Java的确很爽,海量的资源海量的库 ...

  8. docker 构建企业级Maven私服仓库 nexus3

    文章目录 一.环境准备 1. 安装docker 2. 启动docker 3. 拉取镜像 4. 目录权限 5. 创建容器 6. 监控日志 二.登录配置 2.1. 效果验证 2.2. 登录 2.3. 初始 ...

  9. 从maven中央仓库下载jar包

    1.安装本地jar包到maven本地仓库 mvn install:install-file:主要是将本地自定义jar安装到maven仓库,然后在pom中可以直接通过dependency的方式来引用. ...

  10. Maven基础(三)Maven仓库和settings.xml文件配置

    一.Maven仓库的分类 Maven 的工作需要从仓库下载一些 jar 包,如下图所示,本地的项目 A.项目 B 等都会通过 maven软件从远程仓库(可以理解为互联网上的仓库)下载 jar 包并存在 ...

最新文章

  1. python生成有条件的列表_python复杂列表生成式教程
  2. BIP_BI Pubisher的SQL/XSL/FO扩展函数应用(概念)
  3. Java中的断言(assert)
  4. python 轨迹识别
  5. Android Handler的原理
  6. eeprom stm8l 擦除 读写_STM8L探索套件学习笔记-EEPROM(十一)
  7. php节点对象,JavaScript_JavaScript中访问节点对象的方法有哪些如何使用,JavaScript中访问节点对象的方法 - phpStudy...
  8. 组件接口(API)设计指南-文件夹
  9. Java技术:实现pdf和Excel的生成及数据动态插入、导出
  10. Quartus DSE 初步应用
  11. get和post 两种基本请求方式的区别
  12. nginx ngx_http_autoindex_module
  13. 梯度下降法and实战
  14. RenderMonkey 练习 第一天 【opengl 纹理】
  15. 网络流之最小点权覆盖和最大点权独立集学习
  16. 3. 安装 phpmyadmin
  17. windows定时开关机方法
  18. Single Radio Voice Call Continuity (SRVCC)
  19. Costco已来华,会员制电商是否迎来爆发增长期?
  20. 怎么重置imac_macbookpro怎么恢复出厂设置

热门文章

  1. 服务器虚拟化后有几个io地址,CPU虚拟化,内存虚拟化和IO虚拟化
  2. Epicor客制化 - 在VS中进行开发
  3. 在Visual Studio中对Epicor10进行二次开发
  4. 我学过的一些PS基本操作
  5. Spring中Environment的使用
  6. 什么是公有云、私有云、混合云? 1
  7. mysql创建数据库表_mysql基础之创建数据库和表
  8. Java 基础类型 —— Short
  9. 俞军:百度首席产品架构师
  10. 区块链项目_身份识别系统CryptID