Maven仓库介绍

何为仓库

Maven中的仓库用来存放生成的构建和各类依赖。严格说来只有两种仓库:本地和远程。本地仓库指本机的一份拷贝,用来缓存远程下载、包含你还没有发布的临时构件。html

远程仓库指经过各类协议如file://和http://访问的其它类型的仓库。这些仓库多是第三方搭建的真实的远程仓库,用来提供他们的构件下载(例如repo.maven.apache.org和社区的maven.oschina.net/都是Maven的中央仓库)。其它“远程”仓库多是你的公司拥有的创建在文件或HTTP服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布。apache

本地和远程仓库有着相同的结构,因此脚本能够很容易地在两边运行,或同步仓库供离线使用。不过,通常状况下,仓库内部的布局对Maven用户是彻底透明的。缓存

为何不把JAR存在CVS?

不推荐将jar存储到CVS。Maven强调用户本地仓库的概念,在本地仓库中jar或其它任何工程构件能够被存储和任意构建使用。许多工程依赖共同的组件如XML解析器和标准实用工具等,典型的构建中这些会重复复制,使用Maven这些标准组件能够在本机存储并被任意构建共享使用。安全

这样作有如下优势:服务器

  • 更少的存储 – 当一个仓库很是大的时候,因为每一个JAR只存储一份它实际上节省了空间,尽管看起来不是这样。(译者注:仓库一般很大很占空间,但存储一份JAR相比存储多份确实节省了空间)
  • 检出工程更快 – 若是CVS中没有大的二进制文件,对工程的初次检出或微小更新会更快。尽管这些是不得不下载的,但只须要一次,若是某些经常使用的JAR包已存在就不须要再次下载。
  • 不须要版本 – CVS和其它源码控制系统为版本管理而设计,而外部依赖通常不会改变,或在改变时会同时改变文件名表示版本变化。在CVS中存储这些比起在本地存储并没有额外的好处。

使用仓库

通常来讲,对本地仓库什么都不用作,除非磁盘空间不足而删除它(或彻底清除以从新下载所有)。maven

远程仓库用来下载或上传(若是有权限)。ide

从远程仓库下载

工程声明了一个本地仓库中没有的依赖时会触发下载(或者对SNAPSHOT,若是远程仓库包含新版本时)。Maven默认从中央仓库下载依赖。工具

要覆盖这一设置,你须要指定镜像,参见Using Mirrors for Repositories布局

能够在settings.xml中设置全局镜像,但要注意在工程的pom.xml中指定仓库也是广泛的,settings.xml的设置会优先生效。若是找不到依赖,检查是否覆盖了远程仓库。网站

更多关于依赖的信息,参考Dependency Mechanism

使用中央仓库的镜像

官方仓库有数个位于不一样地理位置的分布。能够修改settings.xml使用一个或多个镜像。操做指南参见 Using Mirrors for Repositories

离线构建

若是你暂时从互联网断开了,仍须要构建工程,能够在命令行中使用离线开关:

1 mvn -o package

许多插件会判断离线设置而不去链接互联网,好比解析Javadoc连接和网站的连接检查。

上传到远程仓库

可能全部的远程仓库都要求必须有权限才能上传。若要上传到中央仓库,参考Repository Center

内部仓库

使用Maven,尤为是在一家公司内,出于安全、速度或带宽的缘由,链接到互联网来下载依赖多是不能接受的。此时,创建一个内部仓库来存放构件的拷贝和发布私有构件是明智的。
从内部仓库下载可使用HTTP或文件系统(使用file://),上传可使用scp, ftp或文件拷贝。

注意只要是在Maven中,内部仓库没有任何特殊之处:它是另外一种远程仓库,包含可下载到用户本地存储的构件,同时是构件发布的目的地。

此外,你可能想将生成的工程站点共享到仓库,更多建立和部署站点的信息,参考Creating a Site

搭建内部仓库

搭建内部仓库只须要找一台服务器存放它,而后拷贝须要的构件,使用与远程仓库如 repo.maven.apache.org一样的目录结构。

不推荐抓取或用rsync获取整个中央仓库的完整拷贝,数据量太大,并且这样作会被禁。你可使用 Repository Management 中介绍的程序来运行内部仓库服务,从互联网按需下载并保存构件来提供更快的内部下载。

另外一种选择是手动下载和检查发布包,拷贝到内部仓库,或经过Maven下载以后手动上传确认过的构件到用做发布的内部仓库。这一操做对禁止自动分发的构件是惟一可行的方式,如Sun提供的J2EE jar包。查看 Guide to coping with SUN JARs了解更多。

值得一提的是,Maven将来计划包含对这些特性的加强支持,包括下载时自动点击许可和签名验证。

使用内部仓库

使用内部仓库很简单,增长一个repositories元素:

<project>
  ...
  <repositories>
    <repository>
      <id>my-internal-site<id>
      <url>http://myserver/repo</url>
    </repository>
  </repositories>
  ...
</project>

若是你的内部仓库须要认证,在settings文件中使用id元素指定登陆信息。

 

9、部署到内部仓库

使用内部仓库的最重要缘由之一是将本身的私有包发布出来共享。

要发布到仓库,你须要经过SCP,SFTP,FTP,WebDAV或文件系统之一访问仓库。链接经过各类wagons实现,有些wagon可能须要在构建中加入扩展。

相关文章
相关标签/搜索