- 浏览: 1595470 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
payton321:
dao,util,servie,基础模块应该是maven项目, ...
Maven最佳实践:划分模块 -
AdrainHuang:
深有体会,我这边已经 给项目坑死了,依赖关系太复杂,基本没人敢 ...
Maven最佳实践:管理依赖 -
远方_张涛:
赞赞赞,生动有趣还说明问题
Maven最佳实践:版本管理 -
smartdog:
新的网站访问不了啊~~博主快更新
再见JavaEye -
smartdog:
言简意赅,厉害
Maven最佳实践:遵循约定
(译自:Nine Reasons to Use a Repository Manager: Sonatype Nexus )
目前有很多组织使用了一些工具依赖于Maven仓库,但他们并没有采用一个仓库管理器,对于这一点我十分惊讶。可能没人提出来这一点,没人站出来告诉别人使用一个仓库管理器能带来什么好处。我经常能从很多不使用Maven仓库管理器的组织那里听到这样的字眼:“我们不需要那么复杂……”,或者“中央仓库够了,我们不需要在本地建立这样一个仓库”
不用说,关于什么“是”一个好的Maven仓库,还存在很多误解。首先,安装它一点都不复杂。你只需要花几分钟就能下载并安装好Nexus ,而且我们已经特意的使得这一过程变得容易,并且尽可能减少侵入性。第二,一个缓存远程仓库的仓库管理器并不会缓存所有的东西。一个好的仓库管理器只会按需的缓存内容。这里是为那些排斥仓库管理器的人提供的九条理由。
九 - 加速构建
当你在Maven中运行多模块项目构建的时候,你认为Maven是怎么知道它是否需要更新插件或者snapshot依赖的呢?它需要为所有需要检验的构件向服务器提出一个请求。即使没什么变化,如果你的项目依赖于一些SNAPSHO或者你没有指定插件版本,Maven就必须对远程仓库提交数十至数百的请求。所有这些通过公共Internet的请求加起来会浪费很多时间。我看到过一个复杂的构建,在安装了本地Nexus之后,节省了75%的时间。不要再浪费编码时间去无畏的等待Maven对远程仓库的请求了。
八 - 节省你自己的带宽
组织越大,节省带宽就越重要。如果你有数千开发者不停的浪费带宽在下载同样的文件,那么使用一个仓库管理器可以保存一个本地的缓存,从而节省大量的带宽。即使一些小型的组织,对于网络连接和IT运行的预算也有限,也必须处理很多开发人员浪费带宽不停重复下载同样文件的问题。
七 - 节省中央Maven仓库的带宽
这可以说是一种公德心,利己利人。运行一个中央Maven仓库不容易。基于全球软件构件的需要,服务数百万的请求,数T的数据,一点都不便宜。简单的事情如每个组织安装一个本地仓库管理器可以大量降低对中央仓库的带宽需求(至少一半)。如果你有大于两个开发者在使用Maven,那么请为了中央仓库义务的安装一个仓库管理器。
六 - 可预见性和稳定性
过去一些年,你多久会遇到一次由于断网引起的业务彻底中断?让每天的工作依赖于中央仓库意味着你正依赖于因特网连接(事实上中央仓库是24/7可用的)。虽然我们有信心保持中央仓库24/7运行,但你还是应该花一点时间建立你自己的仓库,以确保你的开发团队不会由于任意一方的网络中断而惊讶。如果你有本地的仓库管理器,如Nexus,你可以确保即使你失去了网络连接你还能工作。
五 - 控制和审计
当然,你已经转移到了Maven(或者Ivy,Ivy读取同样的仓库),而且你有一房间的开发人员,他们被授权添加或者删除依赖,以及试验新的框架。我们都清楚。开发人员可能都对试验新框架更感兴趣,而不是正常工作。但不幸的是,很多时间,一个架构师,或者一个架构小组需要建立组织使用的基线标准。Nexus提供这一层次的控制。
如果你需要对那些组织中使用的构件进行更多的监管,看一下Nexus。没有仓库管理器,对于那些你开发团队会使用的依赖你只有很少的控制。
四 - 能够部署第三方构件
你希望能够基于开源数据库工作,如MySQL或者Postgres,但是你组织有不同的需求,和Oracle有一个长期的支持合同。因此,你有一系列JAR文件不能够从公共Maven仓库获得。你需要将这些构件部署到仓库中,然后配置Maven去读取该仓库。
你不用为此手工编写一些POM,只要下载Nexus,然后花两三分钟时间使用这个免费,功能强大的工具来创建一个仓库,部署第三方构件。Nexus提供了直观的上传界面,你可以使用它上传任意JAR文件,然后在你项目依赖中引用它。
三 - 可以建立本地内部仓库
非常好,你正使用Maven,每个人都从头开始根据代码执行快速的构建。整个一年,这都工作得很好,但是当系统变得庞杂,程序员开始抱怨构建花了太多时间。你可以通过分割项目解决这个问题,然后使用Nexus作为一个内部仓库来存储内部的依赖。
例如,有一个公司有30个开发者,被分成三个10人的小组,每个小组关注于系统的不同部分。如果不能够很方便的实现内部依赖共享,类似的小组就不得不创建一个基于文件系统的仓库,或者将系统整个的构建,那样依赖就能被安装到每个开发者的本地仓库。
另一种选择是将项目分隔成不同的模块,每个模块都依赖于存储在Nexus仓库中的构件。这么做之后,小组之间可以通过基于Nexus交换已编译的snapshot和release构件来协作。换句话说,你不需要让没个开发者签出巨大的包含整个组织代码的多模块项目。组织中的每个小组可以发布snapshot构件至本地Nexus,从而每个小组可以维护一个只包含它负责代码的项目结构。
在宏观层次,公共Maven仓库及建立项目定义的严格制度,可以充当开源世界中跨项目协作的基础。(这听起来是不是很重要,很“令人敬畏”?)
二 - 可以建立公共仓库
如果是一个开源项目,或者你将软件发布到公共环境,Nexus可以是一个你用来为外部用户提供构件服务的工具。这么想……上你发布项目的一个版本是什么时候?假设它没被发布到Maven仓库中,你很可能需要编写一些脚本来打包此次发布的内容,可能某些特定的人需要使用一个超级权限的密钥来为该发布签名。然后,你必须将其上传到一些web服务器上,然后确保相应的页面被更新,正确描述了此次发布。这里有很多不必要的复杂度。
如果你正使用Nexus,它可以被配置成一个暴露在公共世界的宿主仓库,你就可以使用Maven的打包和装配能力,以及Maven仓库的结构,来使得一次发布变得非常的简单。而且,这不仅仅正对于JAR文件和Java web应用;Maven仓库可以存储任何种类的构件(事实上,我正考虑使用Maven仓库结构来发布用户文档和视频内容)。Nexus,及Maven仓库,总得来说为发布定义了大家都知道的结构。如果你正编写一些Java类库,将其发布到你自己的Nexus实例中,然后提供公共仓库服务,就可以让人们更容易的马上开始使用的的代码。
一 - 这相当简单
类似的事情我经常听到。有一个早晨的Scrum会议,或者项目状态的周会。一些低层的程序员怯懦的举起他的手说,“我们可以安装一个如Nexus的仓库软件么?我认为它能帮助我们显著的加速很多工作。”一直被时间的预算压着的开发经理,听到单词“安装”和“软件”,就马上否决了这件事情,理由是他们没有时间做这种基础工作,因为这不是“需求驱动”的。(我看到过这种事情发生。)
这个经理不知道的是,在一个共享的机器上安装Nexus,然后配置随后的系统服务可能是需要花不到十分钟的时间。事实上,你可以在免费的Maven书上读到安装说明。安装Nexus十分的简单。我已经有了一些实践,但是我认为任何一个知道如何操作web浏览器的人都可以在几分钟内完成这项工作。
评论
我在安装了nexus做为本地仓库,如果我要创建一个S2SH工程,如果不开启远程代理,它所依靠的jar包是不是都要上传到3rd party仓库去??
如果你不打算让nexus代理远程仓库,那么你就必须手动上传所有需要的jar
我在安装了nexus做为本地仓库,如果我要创建一个S2SH工程,如果不开启远程代理,它所依靠的jar包是不是都要上传到3rd party仓库去??
那个Google组已经加进去了,但是不熟悉怎么用。
描述是,在Nexus里面的maven central中,我在configuration设置了overrite local storage location指向我的本地Nexus目录。我把个人建立的包放到这个目录下面。然后reindex,以browse local storage方式是能够在mavencentral下看到那个自己加入的目录的,这个目录里面包含了自己建立的jar和pom文件。但是以browse Index方式是看不到的。
我在Eclipse的maven Index中加入了maven central的URL,在这个索引显示的包中未能找到那些个人建立的文件。
以上是我的做法,我不清楚那里出错了,已经困惑了3天,请指点。
maven central是一个proxy仓库,不推荐覆盖其存储地址。
正确的做法是:建立一个hosted仓库,指向自己的存储地址。另外使用group仓库,包含central和你建立的hosted仓库,确保在这个group中可以正确浏览索引。
如果你在nexus中得到的索引都是错误的,m2eclipse又怎能给你正确的结果?
如果还有问题,来这里讨论吧:http://groups.google.com/group/maven-zh
我不能保证回复博客上的所有问题
描述是,在Nexus里面的maven central中,我在configuration设置了overrite local storage location指向我的本地Nexus目录。我把个人建立的包放到这个目录下面。然后reindex,以browse local storage方式是能够在mavencentral下看到那个自己加入的目录的,这个目录里面包含了自己建立的jar和pom文件。但是以browse Index方式是看不到的。
我在Eclipse的maven Index中加入了maven central的URL,在这个索引显示的包中未能找到那些个人建立的文件。
以上是我的做法,我不清楚那里出错了,已经困惑了3天,请指点。
使用Nexus的时候,Nexus的每个仓库有两种查看索引的方式,一个是browse Index,一个是browse local storage。前者是指向网络,后者是指向本地目录的,本地目录里面的包有可能是某个公司或者个人自己生成的,因此这两种索引方式查出来的结果不一定是一样的。但是每个仓库的URL链接地址都只有一个,例如http://127.0.0.1:8081/nexus/content/groups/public/。
在IE中打开这个地址,能够把两种索引方式查到的包找出来。但是,在Eclipse增加maven Index的时候,把这个地址加进去后,查出来的结果只有browse Index的包,也即是只有指向网络的索引,本地目录里面的包无法找到。因此导致项目里面无法加入私人开发的包作为依赖。请问这种情况怎么解决??
使用最新版本的nexus+ecilpse,在往nexus上传本地artifact之后,进行一次reindex,同样,在m2eclipse中更新指向nexus的index,这样就能搜索到所有artifact了。(注意Nexus会自动merge远程index和本地index,因此不存在远程被索引,本地不被索引的问题)
使用Nexus的时候,Nexus的每个仓库有两种查看索引的方式,一个是browse Index,一个是browse local storage。前者是指向网络,后者是指向本地目录的,本地目录里面的包有可能是某个公司或者个人自己生成的,因此这两种索引方式查出来的结果不一定是一样的。但是每个仓库的URL链接地址都只有一个,例如http://127.0.0.1:8081/nexus/content/groups/public/。
在IE中打开这个地址,能够把两种索引方式查到的包找出来。但是,在Eclipse增加maven Index的时候,把这个地址加进去后,查出来的结果只有browse Index的包,也即是只有指向网络的索引,本地目录里面的包无法找到。因此导致项目里面无法加入私人开发的包作为依赖。请问这种情况怎么解决??
我觉得Nexus还是有很多问题,我在Maven Central中的Browser中可以看到一个Local Storage文件树,点击"Browser Index"切换到索引视图,居然告诉我"Maven Central(not available)",要知道,我已经在Scheduled Task中创建了一个调度,下载Maven Central的索引,而且该调度已经运行了2个小时了!!!不知道juvenshun能不能给我一个解答呢。难道要我在去下一个Archiva吗
maven central是在美国的,而central的索引是很大的70M+,下载这玩意当然耗时,而且容易失败。耐性点了,只能。谁让咱中国带宽那么贵,没人能提供镜像啊。
BTW,开启central repo的下载远程索引之后,reindex下nexus就会帮你下载索引了,不用建立任务。
不知道juvenshun能不能给我一个解答呢。
难道要我在去下一个Archiva吗
请教一个问题,在nexus里面建了一个代理仓库,但是查看索引的时候选择“Browse index”,始终是(Not Available),想问一下怎么能看到index?
由于你建立的是一个代理仓库,nexus本地其实只是存储了一个远程内容的缓存,也就是说,只有在远程仓库拥有index的情况下(你可以通过直接访问远程仓库,查看其是否拥有.index文件夹核实),该代理仓库才能下载到,否则,你将看不到index内容。另外,确保你配置该代理仓库的时候,选项“allow download remote index”为true。
如果你用的是war,这个文件夹默认位置是${user.home}/sonatype-work
如果你用的是bundle,这个文件夹默认就处于nexus-webapp的同一级目录
因此,将其打包便可。还原的时候再用其内容覆盖。
发表评论
-
我的书《Maven实战》
2010-11-12 13:09 70193我本来已经决定停止更新该博客了,但是为了推广下我的新书《Mav ... -
m2eclipse 0.10.0发布
2010-02-22 17:34 8095本文译自 http://www.sonatyp ... -
按需构建多模块,玩转Maven反应堆
2010-01-07 19:57 29637在多模块Maven项目中,反应堆(Reactor)是一个包含了 ... -
Maven仓库的布局
2009-12-14 08:54 12003注:本文节选自我正在 ... -
Maven3初窥
2009-11-10 16:28 20825Maven3的开发已经完成大半,本周末将发布alpha-3(T ... -
Nexus 1.4.0 发布
2009-10-29 17:22 6268新完成的用户故事: [ NEXUS-463] - ... -
archtype:generate出错?
2009-10-12 00:10 8248我们常常会使用mvn archet ... -
你最常用的构建和发布管理工具是什么?
2009-09-13 15:03 13068最近Eclipse社区进行了一项调查,关注社区如何使用Ecli ... -
策划编写《Maven实战》——初步目录
2009-09-09 03:42 83002010-08-27更新 关注 ... -
Maven最佳实践:持续集成
2009-08-21 17:14 0test -
Maven最佳实践:集成web容器
2009-08-21 17:13 0test -
《Maven权威指南》完整发布,带官方PDF
2009-07-06 00:45 676212010/04/29更新 :我已 ... -
Nexus Indexer 2.0:增量下载
2009-05-14 16:33 10356原文:http://www.sonatype.com/peop ... -
Maven最佳实践:版本管理
2009-04-29 00:04 125137什么是版本管理 首先,这里说的版本管理(version ma ... -
Maven最佳实践:Maven仓库
2009-04-01 17:42 111156什么是Maven仓库 在不用M ... -
Maven中央仓库的中国镜像
2009-03-31 22:53 45959(2011-01-27更新,由于私人原因,该镜像已关闭,在此致 ... -
Nexus入门指南(图文)
2009-03-15 23:07 147751Nexus介绍 Nexus 是Maven仓 ... -
“第十七章 编写插件” 发布
2009-03-09 17:16 3930又是漫长的一章内容,但如同本书的任何一章一样,由于原作者都是M ... -
Maven最佳实践:管理依赖
2009-02-23 16:50 28415"If I have seen further it ... -
m2e:为Eclipse引入Maven(下)
2009-02-04 16:19 30381译自:http://www.sonatype.co ...
相关推荐
Nexus是由Sonatype公司开发的一款强大的Maven仓库管理器,它不仅能够作为本地仓库,还可以作为代理仓库,甚至可以用来托管自定义的库。Nexus提供了一个图形用户界面,方便管理和维护各种仓库。 ** Nexus 2.11.4-01 ...
Nexus是Sonatype公司开发的一款强大的仓库管理器,主要用于Maven、Gradle等构建工具的依赖管理和部署。这个“nexus-3.17.0-01-win64.zip”文件是Nexus 3.17.0的Windows 64位版本安装包,包含了运行Nexus所需的所有...
Nexus是Sonatype公司开发的一款开源的Maven仓库管理器,它被广泛应用于Java开发领域,尤其是对于Maven、Gradle等构建工具的项目管理。Nexus作为一个私有(或称为“私服”)仓库,可以帮助开发者集中管理和分发软件...
Nexus是Sonatype公司开发的一款强大的仓库管理器,主要用于Maven、Gradle等构建工具的依赖管理和部署。在本文中,我们将深入探讨Nexus 2.x的最后一个版本——"nexus-2.14.17-01-bundle.zip",以及如何在国内环境下...
【标题】"nexus-2.7.0-bundle-maven仓库搭建.rar" 提供的是一个用于构建Maven仓库的工具包,Nexus是Sonatype公司出品的一款强大的 Maven 库管理器,它允许开发者集中管理和分发Java组件,包括JARs、源代码、文档、...
《Nexus作为Maven仓库管理器在Linux环境下的部署与使用》 在软件开发领域,Maven已经成为Java项目构建和依赖管理的标准工具。然而,随着项目的复杂性和团队规模的增加,仅靠本地仓库来管理依赖可能变得力不从心。...
Nexus 是一个由 Sonatype 公司开发的企业级 Maven 仓库管理器,它允许用户集中管理和分发软件组件,如 JAR 文件、NPM 包或 Docker 映像。Nexus 不仅可以作为代理服务器缓存远程仓库的内容,还可以作为一个私有的、...
标题中的“nexus-2.14.19-01-bundle.tar”指的是Sonatype Nexus,这是一个开源的仓库管理器,广泛应用于Java开发领域,尤其是与Maven、Gradle等构建工具配合使用。Nexus提供了对软件组件(如JARs、WARs、NPM包、...
Nexus Repository Manager是Sonatype公司推出的一款强大的仓库管理器,它支持Maven、npm、NuGet等多种格式的软件包管理。Nexus 3.13.0-01-win64版本是专为Windows系统设计的,包含了所有必要的组件和服务,使得在...
标题 "nexus-3.19.1-02.tar.gz" 指的是 Sonatype Nexus Repository Manager 的一个特定版本,这是一个开源的软件仓库管理工具,广泛用于管理和分发Maven、npm、RubyGem等不同类型的软件包。该版本是3.19.1的第二个...
在标签中,"nexus"和"maven"是关键词,强调了Nexus作为Maven仓库管理器的角色。Nexus与Maven的集成使得开发者可以通过私有仓库快速获取和部署Maven项目依赖,同时也能方便地发布自己的构建到仓库中供团队成员使用。 ...
Nexus是一款强大的仓库管理器,由Sonatype公司开发,广泛应用于Maven、Gradle等Java构建工具中,用于存储、管理和分发各种软件组件,如JAR文件、npm包、Python wheels等。 在描述中提到的“nexus,linux,win,mac...
Nexus,由Sonatype公司开发,是一款广泛应用于软件开发领域的中央仓库管理工具,它集成了Maven、Gradle等构建工具的仓库管理功能,提供对二进制组件的高效存储、检索和版本控制。在此次讨论的版本——"nexus-3.23.0-...
Nexus是Sonatype公司开发的一款开源的软件仓库管理工具,广泛用于Maven、Gradle等构建工具的依赖管理和部署。这个zip文件可能包含了Nexus服务器的完整安装包,包括所有必要的组件和配置文件。 描述中的 "nexus-...
Nexus作为一款优秀的Maven仓库管理器,提供了这样的解决方案。本文将详细讲解如何在Unix系统上安装并配置Nexus 3.23.0版本,创建并管理公司的Maven私有仓库。 首先,我们来了解下Nexus的核心功能。Nexus不仅可以...
Nexus是Sonatype公司开发的一款强大的仓库管理器,主要用于Maven、npm、Gradle等构建工具的依赖管理和分发。Nexus不仅仅是一个简单的存储库,它还提供了高级功能,如代理仓库、虚拟仓库、存储库组、 artifact版本...
这时,Nexus作为一个强大的仓库管理器,能为企业搭建私有的Maven仓库,提供更高效、安全的依赖管理。本文将深入探讨Nexus在构建Maven仓库中的应用,特别是针对第三方插件的处理。 【描述】:“本总结详细介绍了如何...
Nexus2作为一个开源的仓库管理工具,能够托管各种类型的艺术品,如JAR、WAR、POM等,同时它也支持代理远程仓库,如Central Maven Repository,以减少网络延迟。 描述中提到,该压缩包是跨平台的,支持Windows和...
Nexus是一个由Sonatype开发的强大仓库管理系统,它不仅简化了内部仓库的维护工作,还优化了对外部仓库的访问方式。Nexus的主要特点包括: - **一站式管理**:在一个界面内全面控制仓库中的每一个Artifact。 - **...
Nexus是由Sonatype公司开发的一款强大的Maven仓库管理器。它不仅是一个存储库,还可以作为一个代理服务器,缓存远程仓库的依赖,从而提高构建速度。Nexus 2.6.2-01可能包含了对Maven、Gradle等构建工具的支持,以及...