Maven仓库介绍

仓库介绍

仓库

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

远程仓库指通过各种协议如file://和http://访问的其它类型的仓库。这些仓库可能是第三方搭建的真实的远程仓库,用来提供他们的构件下载(例如repo.maven.apache.orguk.maven.org是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

离线构建

如果你暂时从互联网断开了,仍需要构建工程,可以在命令行中使用离线开关:

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可能需要在构建中加入扩展

转载自 并发编程网 - ifeve.com

时间: 2024-08-12 12:22:15

Maven仓库介绍的相关文章

常用Maven插件介绍(下)

转自:http://www.infoq.com/cn/news/2011/05/xxb-maven-8-plugin     我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标,例如maven- compiler-plugin的compile目标用来编译位于src/main/java/目录下的

利用github搭建个人maven仓库

缘起 之前看到有开源项目用了github来做maven仓库,寻思自己也做一个.研究了下,记录下. 简单来说,共有三步: deploy到本地目录 把本地目录提交到gtihub上 配置github地址为仓库地址 配置local file maven仓库 deploy到本地 maven可以通过http, ftp, ssh等deploy到远程服务器,也可以deploy到本地文件系统里.例如: <distributionManagement> <repository> <id>h

怎样将jar包添加到maven仓库里面??

问题描述 怎样将jar包添加到maven仓库里面?? 现有一个maven工程 ,,我现在需要一个第三方的依赖jar 以前没有接触过 maven ,我现在想把这个jar放到maven的库里 , 用pom.xml这种方式加项目 ,,而不是建一个lib文件夹放jar文件,,哪位使,,用过maven的大神 教我一下! 万分感谢! 最好能加下我QQ : 80818647 谢了 解决方案 Maven 安装 JAR 包的命令是: mvn install:install-file -Dfile=jar包的位置

解决android studio 3.0 加载项目过慢问题--maven仓库选择

今天用android studio 3.0打开项目时发现一直在谷歌的maven仓库加载 卡到这不动了,看了下maven仓库的配置发现: buildscript { repositories { jcenter() maven { url 'https://maven.google.com' name 'Google' } google() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0' // NOTE: Do n

maven 仓库 使用nexus搭建了私服在局域网另一台电脑上

问题描述 maven 仓库 使用nexus搭建了私服在局域网另一台电脑上 maven 仓库 使用nexus搭建了私服在局域网另一台电脑上,本来正常的,今天要加个依赖,去查找log4j报错 An internal error occurred during: "Repository search". java.lang.OutOfMemoryError: Java heap space 解决方案 刷新下Maven项目,可能是私服地址配置的不对,页可能你加的这个依赖在其它库中,中央仓库里下

安装jar包到本地maven仓库

如何安装jar包到本地maven仓库呢? 使用如下命令即可: Java代码   mvn install:install-file  -Dfile=e:\tmp\hijson\HiJson.jar  -DgroupId=com.kunlunsoft5  -DartifactId=Hijson -Dversion=1.0.0 -Dpackaging=jar      参数说明: -Dfile :指定jar路径 -DgroupId :指定jar包的groupId -DartifactId :指定jar

Maven仓库

坐标和依赖是任何一个构件在Maven世界中的逻辑表达方式:而构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件 基本概念:               构件         在Maven世界中,任何一个依赖.插件或者项目构建的输出,都可以称为构件.           如依赖log4j-1.2.15.jar是一个构件,插件maven-compiler-plugin-2.0.2.jar是一个构件.           任何一个构件都有一组坐标唯一标识     仓库           

Android Studio 将github作为远程maven仓库

github是一样很好用的工具,除了能作为开源项目的搜索工具外,还能用来搭建maven仓库,方便远程的使用.为此,我查阅了一些资料也结合了一些博主的博客,一步步试验最后成功搭建出了这样的maven仓库,在这里我将整个搭建的过程分享给大家. 一.准备 准备好两样必要的工具 git和gradle 1.安装git,直接下载一个 GitHub Desktop for Mac 安装之后,附带着也会安装好git环境 重新启动终端,输入 git --version  如果输出的类似截图的结果的话则git环境配

[转]Maven如何手动添加jar包到本地Maven仓库

Apache Maven,是一个软件(特别是Java软件)项目管理及自动构建工具,由Apache软件基金会所提供.基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建.报告和文档等步骤.曾是Jakarta项目的子项目,现为独立Apache项目. 大家肯定遇到过想在pom文件中加入自己开发的依赖包,这些包肯定是不是在Maven仓库(http://repo1.maven.org/maven2/)的.那我们怎么将那些不存在Maven仓库中的包加入到本地的Mave