构件仓库
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,文件系统中的一种访问方式.连接不同的马车来完成,一些马车可能需要作为扩展被添加到你的构建中.
本文详细介绍了Maven中的仓库概念,包括本地仓库和远程仓库的区别与使用方法。解释了为什么不应将JAR包存放在CVS中,并阐述了使用Maven仓库的优势。此外,还提供了如何配置和使用内部仓库的具体指南。

3178

被折叠的 条评论
为什么被折叠?



