文档章节

Apache Maven --- [Repositories]

moonsnake777
 moonsnake777
发布于 2016/05/23 18:22
字数 1805
阅读 115
收藏 5

构件仓库

Maven中的仓库用来保存构件和不同类型的依赖.

严格来讲,这里只有两种仓库类型:本地和远程.本地仓库引用了你安装的一份缓存远程下载的拷贝,也包含了你还没有正式发布的临时构件.

远程仓库引用了任何其他类型的仓库,通过不同的通讯协议(如:http://和file://)来访问.这些仓库也许是一个被第三方建立起来用来提供它们构件的下载的真实存在的远程仓库(如:repo.maven.apache.org和uk.maven.org存储Maven的中央仓库).

其他"远程"仓库也许是公司内部基于文件或者HTTP服务建立起来的内部仓库,用来在不同的研发团队之间共享私人构件.

本地仓库和远程仓库的结构是一样的,以便于脚本可以轻易的在两边运行,它们也可以被同步离线使用.在日常使用中,仓库的布局对用户来说是完全透明的.

为什么不把JAR包存放在CVS

我们不建议你把JAR包存放在CVS中.Maven试图促进用户本地仓库的概念:它可以存放任何项目构件,也可以被任何数量的构建所使用.在典型的构建中,许多项目都在重复使用一些依赖(如:XML解析,标准工具).通过Maven,这些标准工具可以存储在你的本地仓库中并分享给其他任意数量的构建项目.

它有以下优点:

使用存储空间减少--虽然一个仓库通常都很庞大,因为每个JAR都被放在一个地方,但实际上这节约了空间(因为不需要重复),尽管它看上去不是这样.

检出项目更加快捷--如果没有大量的二进制文件存储在CVS上,那么项目在初始化检出和小规模更新的时候将会更加的快速.虽然它们可能在之后的任何地方还是需要被下载,但是这只会发生一次并且对于一些通用JAR来说可能都没这个必要.

不需要版本控制--CVS和其他的源码控制系统都基于版本控制文件设计,但是外部依赖通常都不会改变,或者即便它们修改了文件名来表明一个新的版本,相比于把它们存放在本地构件缓存,存放在CVS中都没有体现任何额外的好处.

使用仓库

一般情况下,使用本地仓库不需要你做任何操作,除非因为磁盘空间不足需要清理它(或者如果你想完全清空它并重新下载)

对于远程仓库,它们被用来下载和上传(如果你允许这么做的话)

从远程仓库下载

当一个项目声明的依赖在本地仓库不存在时会触发Maven的下载行为(或者对于一个快照,远程仓库有更新的版本).默认情况下,Maven会从中央仓库下载.

想要覆盖这一行为,你需要指定一个镜像,请查阅:http://maven.apache.org/guides/mini/guide-mirror-settings.html

你可以在你的settings.xml文件中设置它来全局的使用一个特定的镜像仓库,但是请注意,通常情况下一个项目都在它的POM中自定义仓库位置而且它比你的settings.xml配置有更高的优先级.如果你发现有依赖找不到,请检查你是否覆盖了远程仓库的默认地址.

更多关于依赖的信息,请查阅:http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

使用中央仓库的镜像

这里有一些官方仓库的地理分布.你可以修改你的settings.xml文件来使用其中的一个或多个镜像位置.更多介绍请查阅: http://maven.apache.org/guides/mini/guide-mirror-settings.html

离线构建

如果你需要临时断网并要离线构建你的项目,使用如下命令:

mvn -o package

注意,许多插件遵循离线设置而且它们不会执行任何需要联网的操作.如解决java文档链接和站点链接检查.

上传到远程仓库

虽然这对于任何远程仓库来说,可能都需要你允许这么做.如上传到Maven中央仓库,请查阅:http://maven.apache.org/repository/index.html

内部仓库

当使用Maven的时候,特别是在企业环境中,连接到网络下载依赖在安全性,速率或者带宽方面是不可接受的.基于这个原因,建立一个内部仓库来保存工件的拷贝,并发布私人构件是很有必要的.

这样的一个内部仓库可以基于HTTP或者文件系统(file://)下载,并使用SCP,FTP或者文件拷贝来上传.

注意,就Maven而言,这个库没什么特殊的:它是另一个远程仓库,包含可以被下载到你本地缓存的构件,并发布构件.

另外,你可能想要分享仓库服务给你生成的项目站点.请查阅:http://maven.apache.org/guides/mini/guide-site.html

建立内部仓库

建立一个内部仓库只需要你有空间来存放它,然后根据中央仓库 (http://repo.maven.apache.org/maven2/) 的布局来拷贝构件到里面.

不建议同步一个完整中央库拷贝因为数据量是庞大的,而且如果你这么做将会被驱逐.你可以使用一个如在仓库管理页面(http://maven.apache.org/repository-management.html)描述的程序来运行你的内部仓库服务,快速下载构件的最新版本并保存到你的内部仓库中.

其他可用选项可以手动检查并下载,然后拷贝到内部仓库,或者让用户通过Maven下载,然后手动上传审核过的构件到内部仓库.这个步骤是唯一可用的方式对于那些许可禁止自动扩散的构件来说,例如Sun提供的J2EE的一些JAR包.参考更多信息访问:http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html

应该注意的是Maven打算在将来包含这些特性的加强版,包括点击下载许可,校验签名.

使用内部仓库

使用内部仓库是非常简单的,仅仅需要改变或者添加一个repositories元素:

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

如果你的内部仓库需要鉴定,id元素可以在你的settings.xml文件中被用来指定登录信息.

部署到内部仓库

拥有一个或多个内部仓库的重要原因之一是可以让你发布你自己的私有项目来共享给其他项目.

要发布项目到仓库,你需要如SCP,SFTP,FTP,WebDAV,文件系统中的一种访问方式.连接不同的马车来完成,一些马车可能需要作为扩展被添加到你的构建中.

© 著作权归作者所有

moonsnake777
粉丝 2
博文 32
码字总数 50045
作品 0
私信 提问
编译Hadoop-64 bit

Hadoop源码版本:2.5.2 名称 版本 JDK 1.7u75(64bit) Maven 3.3.1 Protobuf 2.5.0 autoconfautomake yum自动选择 libtool yum自动选择 cmake yum自动选择 openssl-devel yum自动选择 ncurse......

ifree613
2016/03/04
40
0
调教Eclipse Maven 插件m2e

很久没用过Eclipse的m2e插件Add jar功能了,主要是没有提示功能,只显示本地已经有的jar包,其他都提示“Artifact Id cannot be empty”,今天梳理项目时偶然看到一篇博文http://www.tuicoo...

夏碌冬藏
2016/04/06
531
0
mave 配置文件里面的setting 配置仓库

Using Mirrors for Repositories With Repositories you specify from which locations you want to download certain artifacts, such as dependencies and maven-plugins. Repositories ca......

Oscarfff
2016/02/08
138
0
Gradle打jar包如何上传到maven本地库

前言 本篇教程偏向实战,程序猿直接copy代码加入到自己的项目中做简单的修修改改便可使用,而对于Gradle以及Maven不在此进行展开介绍,如有读者希望了解可以给我留言,并持续关注,我后续会慢...

互扯程序
2017/12/19
0
0
Ubuntu server下搭建Maven私服Nexus

Ubuntu server下搭建Maven私服Nexus   Maven私服Nexus的作用,主要是为了节省资源,在内部作为maven开发资源共享服务器来使用。      1、下载   通过root用户进去Ubuntu server   ...

石頭剪刀b
2015/11/27
82
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis + Ehcache 二级缓存实例

二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕...

xiaolyuh
7分钟前
1
0
Spring源码学习(二)哎呦,按菜谱做菜与AbstractAutowireCapableBeanFactory.createBean流程差不多

记得跟老婆谈恋爱时,有一天心血来潮给老婆做饭,按照菜谱一步一步的做,结果差点把厨房烧了!!! 这事至今老婆还记得。 入口 上一篇说了,AbstractBeanFactory.getBean的主流程 ,今天来说下...

温安适
9分钟前
15
0
前端UI攻城狮 你们该抛弃jQuery了

你不再需要jQuery! Web工程师太依赖jQuery了,某种意义上说jQuery已经成了JavaScript的同义词。但是我们真的需要他么?或许我们应该反思一下什么时候才真的需要jQuery。 对我个人而言开始使...

前端老手
10分钟前
1
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
52分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
59分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部