文档章节

Maven仓库介绍

郏高阳
 郏高阳
发布于 2016/05/25 12:42
字数 1595
阅读 111
收藏 5

何为仓库

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

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

本地和远程仓库有着相同的结构,所以脚本可以很容易地在两边运行,或同步仓库供离线使用。不过,一般情况下,仓库内部的布局对Maven用户是完全透明的。

为什么不把JAR存在CVS?

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

这样做有以下优点:

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

使用仓库

一般来说,对本地仓库什么都不用做,除非磁盘空间不足而删除它(或完全清除以重新下载全部)。

远程仓库用来下载或上传(如果有权限)。

从远程仓库下载

工程声明了一个本地仓库中没有的依赖时会触发下载(或者对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元素指定登录信息。

 

九、部署到内部仓库

使用内部仓库的最重要原因之一是将自己的私有包发布出来共享。

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

 

 

© 著作权归作者所有

郏高阳

郏高阳

粉丝 101
博文 153
码字总数 112268
作品 1
黄浦
程序员
私信 提问
Apache Maven、Maven仓库、Jcenter仓库

版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78460169 文章最早发布于我的微信公众号 AndroidDeHome 中,欢迎大家扫描下面二...

sydmobile
2017/11/06
0
0
【Maven】项目管理利器Maven——前言小序

一、前言 可以说,现在很多的项目管理工具都使用了Maven,学习一下Maven,了解一些Maven相关的命令还是很有必要的。在下面的几篇博客中,小编从下面几个方面向大家介绍Maven: 二、目录结构 ...

kisscatforever
2018/01/15
0
0
【Maven】项目管理利器Maven(三)——本地仓库、远程仓库(私服)和中央仓库

一、前言 在上一篇博客中,小编向大家介绍了如何安装和配置Maven,当然啦,我们配置好Maven后,就要看看它的配置文件了,配置文件中,就不得不提提文件里面配置的内容有什么了,在这篇博客中...

kisscatforever
2018/01/15
0
0
maven如何修改本地仓库与中央仓库

什么是Maven仓库 在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立...

明舞
2014/07/07
4K
9
Maven仓库管理之Nexus

我分两部分来介绍,首先介绍一下Maven的仓库,然后在说一下如何通过Nexus来建立我们自己的仓库,以及如何使用。 Maven 仓库 在以前使用Ant的时候,我们会建立一个lib目录在存放我们的jar包,...

mj4738
2013/01/11
29.8K
8

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
40分钟前
3
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
41分钟前
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
49分钟前
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
55分钟前
6
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部