- 浏览: 1588581 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 69936我本来已经决定停止更新该博客了,但是为了推广下我的新书《Mav ... -
m2eclipse 0.10.0发布
2010-02-22 17:34 7954本文译自 http://www.sonatyp ... -
按需构建多模块,玩转Maven反应堆
2010-01-07 19:57 29449在多模块Maven项目中,反应堆(Reactor)是一个包含了 ... -
Maven仓库的布局
2009-12-14 08:54 11845注:本文节选自我正在 ... -
Maven3初窥
2009-11-10 16:28 20652Maven3的开发已经完成大半,本周末将发布alpha-3(T ... -
Nexus 1.4.0 发布
2009-10-29 17:22 6121新完成的用户故事: [ NEXUS-463] - ... -
archtype:generate出错?
2009-10-12 00:10 8088我们常常会使用mvn archet ... -
你最常用的构建和发布管理工具是什么?
2009-09-13 15:03 12918最近Eclipse社区进行了一项调查,关注社区如何使用Ecli ... -
策划编写《Maven实战》——初步目录
2009-09-09 03:42 81422010-08-27更新 关注 ... -
Maven最佳实践:持续集成
2009-08-21 17:14 0test -
Maven最佳实践:集成web容器
2009-08-21 17:13 0test -
《Maven权威指南》完整发布,带官方PDF
2009-07-06 00:45 673822010/04/29更新 :我已 ... -
Nexus Indexer 2.0:增量下载
2009-05-14 16:33 10211原文:http://www.sonatype.com/peop ... -
Maven最佳实践:版本管理
2009-04-29 00:04 124611什么是版本管理 首先,这里说的版本管理(version ma ... -
Maven最佳实践:Maven仓库
2009-04-01 17:42 110746什么是Maven仓库 在不用M ... -
Maven中央仓库的中国镜像
2009-03-31 22:53 45876(2011-01-27更新,由于私人原因,该镜像已关闭,在此致 ... -
Nexus入门指南(图文)
2009-03-15 23:07 147399Nexus介绍 Nexus 是Maven仓 ... -
“第十七章 编写插件” 发布
2009-03-09 17:16 3856又是漫长的一章内容,但如同本书的任何一章一样,由于原作者都是M ... -
Maven最佳实践:管理依赖
2009-02-23 16:50 28252"If I have seen further it ... -
m2e:为Eclipse引入Maven(下)
2009-02-04 16:19 30283译自:http://www.sonatype.co ...
相关推荐
sonatype nexus最新版 maven私服!
转载的别人提供的sonatype nexus,亲测可用
docker-nexus, Sonatype Nexus的Docker 图像 sonatype/docker-nexus用于 Sonatype Nexus 存储库管理器 2的Docker 映像,。 对于 Nexus 存储库管理器 3,请参考 https://github.com/sonatype/docker-n
2018 sonatype nexus-2.14.8-01.war pro 专业版 测试环境:wind7x64,jdk1.8,tomcat8.5
【Android Gradle 插件】将自定义 Gradle 插件上传到自建 Maven 仓库 ⑤ ( 使用 Sonatype Nexus 搭建 Maven 仓库 ) https://hanshuliang.blog.csdn.net/article/details/127385094 博客资源
Nexus Repository Manager的使用Nexus Repository Manager的使用
sonatype nexus 3搭建Docker私有仓库.docx
该扩展程序可与以下程序包管理器及其网站一起使用。 1. .Net – NuGet – https://www.nuget.org/ 2. Alpine – Linux – https://pkgs.alpinelinux.org/ 3. Chocolatey – Windows – ...
sonatype/docker-nexus 带有 OpenJDK 的 Sonatype Nexus Repository Manager 2 的 Docker 镜像,从 2.14.14 开始,用作基础镜像,而早期版本使用 CentOS。 对于 Nexus Repository Manager 3,请参考构建: # docker ...
sonatype nexus ubuntu下安装指南.docx
该插件将Keycloak领域添加到Sonatype Nexus OSS中,使您可以通过Keycloak领域用户进行身份验证并通过Keycloak领域/客户端角色或组进行授权。 它适用于Nexus 3.x和Keycloak 3.x,Keycloak 4.x,Keycloak 5.x,...
要求Sonatype Nexus OSS配置了npm存储库。 Nexus的有效用户。 已通过连结验证本地机器。 有权在git信息库中推送和提交的用户。安装# npm install -g nexus-npm项目配置在package.json ,在version属性中添加字符串-...
角色扮演:Nexus 3 OSS 该角色将安装并配置Nexus Repository Manager OSS版本3.x。 可以通过重新运行角色来更新所有配置,但与相关的设置除外,它们在关系中是不变的。目录注意:从ansible星系站点查看时,TOC链接将...
Amazon EKS上的Sonatype Nexus存储库OSS 通过EKS上的Helm部署Sonatype Nexus Repository OSS。 通过EFS CSI驱动程序,PV和PVC使用EFS作为Nexus3数据存储 创建一个专用的S3存储桶作为Nexus3 Blobstore 使用外部DNS...
Maven私有库和本地库的安装与配置(Sonatype Nexus + Maven)
Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。 如果使用了公共的Maven仓库服务器,可以从Maven中央仓库下载所需要的构件(Artifact),但这通常不是一个好的做法。 正常...
帮助无法下载,或找不到资源的同学(unix版)
sonatype-nexus-docker Sonatype Nexus 的 Docker 版本用法 docker run -p 8081:8081 --name nexus griff/sonatype-nexus然后将浏览器指向 或者使用明确指定的音量目标: mkdir -p /devdata/nexusdocker run -v /...
sonatype-work\nexus.rar sonatype-work\nexus.rar sonatype-work\nexus.rar sonatype-work\nexus.rar