什么是Maven仓库

在Maven世界中,任何一个依赖、插件或项目构建的输出,都可以称为构建。由于Maven引入了坐标机制,任何一个构建都可以由其坐标唯一标识。坐标是一个构建在Maven世界中的逻辑表示方式,而构建的物理表示方式是文件。Maven通过仓库来统一管理这些文件。

在没有Maven的时候,我们管理构建依赖的方法一般是在每一个项目中创建一个lib文件夹,把需要的jar包都放入lib文件夹中。这种方式不好的地方是我们的所有项目中都存在大量相同的jar包。例如:在所有使用Spring框架的项目中都需要依赖spring-core.jar文件,那么在每个项目中都需要放一份spring-core.jar文件。为了避免这种重复,Maven使用仓库来将所有的构建统一的存储起来。实际的Maven项目将不再各自存储其依赖文件,他们只需要声明这些依赖的坐标,在需要的时候,Maven会自动根据坐标找到仓库中的构建,并使用它们。

为了实现重用,项目构建完毕后生成的构建也可以安装或部署到仓库中,供其他项目使用。

Maven仓库的布局

任何一个构建都可以根据坐标唯一标识,在Maven仓库中,构建就是按照坐标的定义存储在指定的路径下的。例如,在本地仓库中,spring-core.jar的存储位置如下图所示:

打开上图目录中的spring-core-2.5.6.pom文件,看到spring-core的maven坐标定义如下图所示:

由此可知:Maven仓库中路径与坐标的大致对应关系为:groupId/artifactId/version/artifactId-version.packaging。Maven仓库的布局是基于简单文件系统存储的。

仓库的分类

Maven仓库分为本地仓库和远程仓库两种。当Maven根据坐标查找构建时,首先会去本地仓库查找,如果本地仓库存在则使用本地仓库中的该构建;如果本地仓库中不存在或者需要使用最新版本的构建时,Maven就会去远程仓库查找需要的构建,并将远程仓库的构建下载至本地仓库,然后再使用本地仓库中已下载的符合要求的构建。如果本地和远程仓库都没有需要的构建,则Maven会报构建失败错误。

本地仓库即用户机器中基于Maven仓库布局存储构建的目录。而远程仓库还可以分为中央仓库、私服和其他远程仓库三种。中央仓库是Maven自带的默认的远程仓库,当本地没有需要的构建时,就会自动去中央仓库下载。私服是一种特殊的远程仓库,是由用户在局域网中架设的一个私有的仓库服务器,用于代理所有外部的远程仓库。另外,用户自己的项目也可以部署至私服中,供其他的项目下载和使用。私服可以节省带宽、提高构建速度、便于内部项目的共享等。

仓库分类如下图所示:

本地仓库

Maven项目中不再使用lib文件夹管理依赖的构建,当项目构建时,Maven将根据坐标去本地仓库中查找依赖的构建并使用。Maven默认的本地仓库的地址为:用户目录\.m2\repository。如本人的本地仓库目录为:C:\Users\benma\.m2\repository。如果我们想要修改本地仓库的地址,可以在\.m2目录下创建一个settings.xml文件,该文件可以从Maven的安装目录的conf目录下拷贝一份。然后设置settings.xml文件中的localrepository参数即可。如下图所示,即将本地仓库的地址设置为:D:\java\apache-maven\repository

Maven在进行项目构建时,会首先去本地仓库查找需要的构建,如果存在则使用,如果不存在或需要下载最新版本则会去远程仓库下载需要的版本至本地仓库后使用。需要说明的是,当我们安装好Maven后,本地仓库中是没有文件的,只有在执行项目构建时需要某个构建,本地仓库才会从远程仓库下载构建至本地仓库中。本地仓库增加构建有两种情况:①执行构建时本地仓库没有所需的构建,从远程仓库下载构建至本地仓库;②执行install命令将本地构建的内部项目部署至本地仓库中。

关于Maven的install命令及构建,请参考本人的另一篇博客:Maven生命周期详解

远程仓库

远程仓库就是本地仓库下载构建的仓库。每一个用户的本地仓库只有一个,但是可以配置一个或多个远程仓库。

中央仓库

中央仓库为Maven默认的远程仓库,Maven默认的远程仓库的配置在:Maven安装目录/lib/maven-model-builder-3.1.0.jar/org/apache/maven/model/pom-4.0.0.xml文件中(本人介绍的是Maven3,使用的是3.1.0版本。Maven2中配置与Maven3不同)。该pom文件为Maven的超级pom,任何pom工程都会继承该超级pom。该pom中远程仓库的配置如下图所示:

上图中在project元素下,使用repositories下的repository元素配置远程仓库。id为central,这是Maven中央仓库的唯一标识,如果需要配置其他远程仓库不能与该id相同。url为该远程仓库的地址。layout为default是该远程仓库的布局方式,default方式即为上面所说的基于坐标的简单文件存储布局方式:groupId/artifactId/version/artifactId-version.packaging。再往下面snapshots的enabled为false代表不能从该远程仓库下载快照版本。关于快照版本,下面会有详细的讲解。

私服

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网的Maven用户使用。当Maven需要下载构建时,首先从私服请求,如果私服上不存在该构建,则从外部的远程仓库下载,存储在私服上之后,再为Maven用户的下载请求提供服务。此外,一些无法从外部仓库下载的构建也能从本地上传至私服上供Maven用户使用。

Maven私服有以下好处:

  • 节省外网带宽

    之前所有的Maven用户下载构建都需要取外网的远程仓库,使用私服之后,对于已经下载到私服的构建直接就可以下载;而且只要有一个人下载了改构建,私服中就存储了该构建,其他人下载该构建时就不需要再次去外网了。
  • 加速Maven构建

    私服的存在使得Maven构建时访问外网的次数大大减少,提高了构建速度。
  • 部署第三方构建

    一些无法从外部仓库下载的构建也能从本地上传至私服上供Maven用户使用。
  • 提高稳定性,增强控制

    私服的存在可以减少Maven对网络的依赖,提高了稳定性。一些私服软件(如Nexus)还提供了很多管理的功能,如权限管理、Release/Snapshot版本区分等,管理员可以对仓库进行一些更高级的控制。

    建立私服是用好Maven的关键之一。请参考大神徐晓斌的博客文章:Nexus入门指南(图文)

关于远程仓库的配置等知识,请参考大神徐晓斌的博客文章:Maven最佳实践:Maven仓库

声明:本篇博客是本人学习了徐晓斌的《Maven 3 in Action》有关仓库的章节后的学习笔记以及本人在使用Maven的过程中对仓库的一些理解。仅用于学习交流。

Maven仓库概述的更多相关文章

  1. 转:aliyun阿里云Maven仓库地址——加速你的maven构建

    maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view-reposito ...

  2. aliyun阿里云Maven仓库地址——加速你的maven构建

    maven仓库用过的人都知道,国内有多么的悲催.还好有比较好用的镜像可以使用,尽快记录下来.速度提升100倍. http://maven.aliyun.com/nexus/#view-reposito ...

  3. maven仓库信息分析站点推荐

    maven是java的一个依赖,打包管理的工具,稍微大一点的java项目都需要使用maven. 随着java的壮大,maven仓库越来越大,仓库中的jar包有60多万,各种group,各种构件,各种版 ...

  4. 国内好用的maven仓库,添加到本地nexus中

    速度快的maven仓库真的难找,国外网站很多被封了.前天在网上找,有人说阿里有个公开的,速度很快.确实很快! 我添加到本地nexus中,结果不能更新索引,我是这么添加的,如下: 这个地址在浏览器中能够 ...

  5. Maven最佳实践:Maven仓库(转)

    转自:http://juvenshun.iteye.com/blog/359256 什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/li ...

  6. maven仓库使用

    maven镜像仓库 1.国内maven镜像仓库 阿里云镜像 <mirrors> <mirror> <id>aliyun</id> <name> ...

  7. maven 仓库地址:

    maven 仓库地址: 共有的仓库 http://repo1.maven.org/maven2/http://repository.jboss.com/maven2/ http://repositor ...

  8. 配置maven仓库

    1.安装完,配置好环境变量 mvn -v 检查是否成功 mvn install 会将项目生成的构件安装到本地maven仓库 2.settings.xml文件配置: 1)修改本地仓库位置 maven_h ...

  9. 收集的maven 仓库地址(maven repository)

    maven 仓库地址: 共有的仓库http://repo1.maven.org/maven2/http://repository.jboss.com/maven2/http://repository. ...

随机推荐

  1. 使用IntelliJ IDEA的小技巧快乐编程(1)

    前言 我很喜欢和别人讨论一些问题,有时候,在公司里,讨论这样的问题需要演示代码.常常会碰到的一种情况是(根据我的记忆这半年多来至少超过了10次),别人会打断你的演示,抛出一个问题:等等,你刚才的操作是 ...

  2. ●CodeForces 429D Trick_Function

    题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...

  3. bzoj1767[Ceoi2009]harbingers 斜率优化dp

    1767: [Ceoi2009]harbingers Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 421  Solved: 112[Submit][S ...

  4. django rest-framework 1.序列化 一

    上图为项目完整的目录结构 一.入门 需要先安装需要使用到包 pip install django pip install djangorestframework 先来创建一个新项目 django-ad ...

  5. python中的赋值操作和复制操作

    之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...

  6. WINFORM中treeview 节点显示不全

    在设置treeview节点时,出现如下显示不全的问题: 这个问题是由于我们在treeview任务中编辑节点时设置的字体大于我们在treeview属性中设置frot字体导致的. 所以只要将treevie ...

  7. Python Web学习笔记之多道程序设计技术和操作系统的特性

    采用了多道程序设计技术的操作系统具有如下特性 : ① 并发性.它 是指两个或两个以上的事件或活动在同一时间间隔内发生.操作系统是一个并发系统,并发性是它的重要特征,操作系统的并发性指计算机系统中同时存 ...

  8. Python中文件的操作

    文件的操作介绍 文件打开的方法 主要有两种: no with 格式:open(file, mode='r', buffering=-1, encoding=None, errors=None, new ...

  9. 文件服务器的详细配置之共享权限与NTFS权限的设置

       文件服务器的详细配置之共享权限与NTFS权限的设置    在大中型企业中,一般而言所谓文件服务器是指共享文件夹,即对共享权限与NTFS权限的设置!当然这也是我们搞网络者必须会的,是必经之路!我旨 ...

  10. mybatis添加记录时返回主键id

    参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个 ...