1. 简单介绍

maven能够在某个位置统一存储全部maven项目共享的构件,这个统一的位置就是仓库。实际的Maven项目将不会各自存储其依赖文件,它们仅仅须要声明这些依赖的坐标,在须要的时候(比如。编译项目的时候须要将依赖增加到classpath中),maven会自己主动依据坐标找到仓库中的构件。并使用它们。为了实现重用,项目构建完成后生成的构件也能够安装或者部署到仓库中,供其它项目使用。


2. 仓库分类

对于maven来说,仓库仅仅分为两类:本地仓库和远程仓库。当maven依据坐标寻找构件的时候,它首先会查看本地仓库。假设本地仓库存在此构件,则直接使用;假设本地仓库不存在此构件,或者须要查看是否有更新的构件版本号,maven就会去远程仓库查找,发现须要的构件之后,下载到本地仓库再使用。假设本地仓库和远程仓库都没有须要的构件,maven就会报错。

在这个最基本分类的基础上,还有必要介绍一些特殊的远程仓库。

中央仓库是maven核心自带的远程仓库。它包括了绝大部分开源的构件。在默认配置下,当本地仓库没有maven须要的构件的时候,它就会尝试从中央仓库下载。私服是还有一种特殊的远程仓库。为了节省带宽和时间,应该在局域网内架设一个私有的仓库server。用其代理全部外部的远程仓库。

内部的项目还能部署到私服上供其它项目使用。除了中央仓库和私服。还有非常多其它公开的远程仓库,常见的有java.net
Maven库(http://download.java.net/maven/2/)和jboss Maven库(http://repository.jboss.com/maven2/)等。



3. 本地仓库

默认情况下,无论是在windows还是linux上,每一个用户在自己的用户文件夹下都有一个路径名为.m2/repository/的仓库文件夹。有时候,由于某些原因(比如C盘空间不够,或者要重装系统等等)。用户会想要自己定义本地仓库文件夹地址。这时,能够编辑文件~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址。比如:
<settings>
<localRepository>D:\IT\maven\repo</localRepository>
<settings>
这样,该用户的本地仓库地址就被设置成了 D:\IT\maven\repo。

须要注意的是。默认情况下,~/.m2/settings.xml文件是不存在的,用户须要从Maven安装文件夹复制$M2_HOME/conf/settings.xml文件再进行编辑。


一个构件仅仅有在本地仓库中之后,才干由其它Maven项目使用,那么构件怎样进入到本地仓库中呢?
(1)最常见的是Maven从远程仓库下载到本地仓库中。当我们第一次执行某个命令时,比如mvn compile时,会下载大量文件当本地仓库中。

(2)另一种常见的情况是,将本地项目的构件安装到Maven仓库中。使用命令:mvn clean install就可以完毕安装。install目标就是将项目的构建输出文件安装到本地仓库。

4. 远程仓库

安装好Maven后,假设不运行不论什么Maven命令。本地仓库文件夹是不存在的。当用户输入第一条Maven命令之后。Maven才会创建本地仓库,然后依据配置和须要。从远程仓库下载构件至本地仓库。



本地仓库好比书房。我须要读书的时候先从书房找,对应的。Maven须要构件的时候先从本地仓库找。远程仓库就好比书店,当我无法从自己的书房找到须要的书的时候。就会从书店购买后放到书房。对应的,当Maven无法从本地仓库找到须要的书的时候,就会从远程仓库下载构件到本地仓库。一般的,对于每一个人来说,书房仅仅有一个,但外面的书店却有非常多。类似的,对于Maven来说。每一个用户仅仅有一个本地仓库。但能够配置非常多远程仓库。

5. 中央仓库

因为最原始的本地仓库是空的,Maven必须知道至少一个可用的远程仓库。才干在运行Maven命令的时候下载到须要的构件。中央仓库就是这样一个默认的远程仓库。Maven的安装文件自带了中央仓库的配置。读者能够使用解压工具打开jar文件$M2_HOME/lib/maven-model-builder-3.3.9.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>
</snapshots>
</repository>
</repositories>

包括这段配置的文件是全部Maven项目都会继承的超级POM。

这段配置使用central对中央仓库进行唯一标识,其名称为Central Repository,它使用default进行仓库布局。最后须要注意的是snapshots元素,其子元素enabled的值为false,表示不从该中央仓库下载快照版本号的构件。


6. 镜像仓库

假设仓库X能够提供仓库Y存储的全部内容,那么就能够觉得X是Y的一个镜像。换句话说。不论什么一个能够从仓库Y获得的构件,都能够从它的镜像中获取。

举个样例,http://maven.oschina.net/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,因为地理位置的因素。该镜像往往能够提供比中央仓库更快的服务。

因此,能够配置Maven使用该镜像来替代中央仓库。

编辑settings.xml(apache-maven-3.3.9\conf\settings.xml)。代码例如以下:

<mirrors>
<mirror>
<id>maven.oschina.net</id>
<mirrorOf>central</mirrorOf>
<name>maven mirror in China</name>
<url>http://maven.oschina.net/content/groups/public/</url>
</mirror>
</mirrors>

该例中,mirrorOf的值为central。表示该配置为中央仓库的镜像。不论什么对于中央仓库的请求都会转至该镜像。用户也能够使用相同的方法配置其它仓库的镜像。

id表示镜像的唯一标识符,name表示镜像的名称。url表示镜像的地址。


关于镜像的一个更为常见的使用方法是结合私服。

因为私服能够代理不论什么外部的公共仓库(包含中央仓库),因此。对于组织内部的Maven用户来说。使用一个私服地址就等于使用了全部须要的外部仓库,这能够将配置集中到私服。从而简化Maven本身的配置。

在这样的情况下,不论什么须要的构件都能够从私服获得,私服就是全部仓库的镜像。

以后再慢慢介绍私服的使用。



以下提供一些别的镜像仓库:
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
 
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
 
<mirror>
<id>net-cn</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://maven.net.cn/content/groups/public/</url>
</mirror>
 
<mirror>
<id>ibiblio</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
</mirror>
<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>
 
<mirror>
<id>JBossJBPM</id>
<mirrorOf>central</mirrorOf>
<name>JBossJBPM Repository</name>
<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
</mirror>



来源于:《Maven实战》


[Maven实战](6)仓库(本地仓库,远程仓库,镜像)的更多相关文章

  1. MAVEN自动发布更新本地和远程仓库

    1.本地仓库 的更新 mvn  clean package install  2.远程 仓库 的更新 mvn clean package deploy 2.1工程文件pom.xml的设置 <bu ...

  2. maven配置本地和远程仓库

    maven项目中我们不用挨个导入jar包,那这些Jar包从哪里来呢?当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载.首先,Maven 将从本地资源库 ...

  3. git 快速使用(本地仓库同步到远程仓库)

    学git一段时间,可惜公司用的是svn,平时少用,又忘了,总结一下,免得下次又得重新学习.得多多用才是正道! 一.  将本地的提交到网上git仓库 1.在git创建仓库                ...

  4. git本地仓库与github远程仓库链接协议问题

    前提条件:有github账号,本地安装了git,能上网. 环境:ubuntu14.0.4LTS 首先在你得在github上创建一个仓库new repository,然后再本地创建一个文件夹mkdir ...

  5. git 入门教程之本地和远程仓库的本质

    本地仓库和远程仓库在本质上没有太大区别,只不过一个是本地电脑,一个是远程电脑. 远程仓库不一定非得是 github 那种专门的"中央服务器",甚至局域网的另外一台电脑也可以充当&q ...

  6. git 使用案例(本地仓库无缝迁移远程仓库)

    之前都是直接从gitlab上clone代码,然后把本地代码copy过去,然后push.有点麻烦,查询了一下如何无缝从本地仓库迁移到远程仓库.记录一波... 下面的例子采用github来做例子. 1. ...

  7. Git常用命令+本地连接远程仓库

    一.git命令整理 git config --global user.email "邮箱名":绑定GitHub邮箱 git config --global user.name &q ...

  8. Git---远程仓库之从远程仓库克隆03

    远程仓库之添加远程仓库02我们讲了先有本地库,后有远程库,如何关联远程库. 现在假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登录GitHub,创建一个新的仓库,名字叫g ...

  9. maven 安装alipay-sdk包到本地及远程仓库

    安装到本地:mvn install:install-file -DgroupId=com.alipay -DartifactId=sdk-Java -Dversion=*** -Dpackaging= ...

  10. 转:MAVEN依赖的是本地工程还是仓库JAR包?

    相信大家都碰见过 maven 配置的依赖或者是 jar 包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看 maven 依赖的文件的时候,就能直接查看到源码. 一.本地工程依赖 举个例 ...

随机推荐

  1. 34.Intellij IDEA 安装lombok及使用详解

    转自:https://blog.csdn.net/qinxuefly/article/details/79159018 项目中经常使用bean,entity等类,绝大部分数据类类中都需要get.set ...

  2. Javascript函数的基本概念+匿名立即执行函数

    函数声明.函数表达式.匿名函数 函数声明:function fnName () {…};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = f ...

  3. POJ 2459 模拟

    题意: 思路: 按照题意模拟即可 //By SiriusRen #include <cstdio> using namespace std; int c,f1,f2,d,xx,yy,vis ...

  4. 洛谷P2891 [USACO07OPEN]吃饭Dining

    题目描述 Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she w ...

  5. ps---报告当前系统的进程状态

    ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同.现在的大部分Linux系统都是可以同时使用这两种方式的. linux上进程有5种状态: ...

  6. python3 requests 模块 json参数和data参数区别

    json 表示使用application/json方式提交请求 data 使用application/form-urlencode方式提交请求

  7. 威佐夫博奕(Wythoff Game)

    出现奇异局面,先取者必败,反之后拿者必败 奇异局面:(0,0) (1,2) (3,5) (4,7) (ak,bk) ak=bk-k,ak=k*(1+√5)/2: 代码实现(poj 1067): #in ...

  8. 使用Ant打包Android应用具体解释——Ant使用解析

    上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生 ...

  9. 使用注解的方式配置Servlet

    提到Servlet的配置,大多数人想到的应该都是在web.xml中配置吧.有没有更简洁的方式呢?今天就学到了採用注解的方式配置Servlet. 此方式尽管简便.但当然也存在问题. 採用注解的有点:你能 ...

  10. 洛谷P3201 [HNOI2009]梦幻布丁

    题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...