有没有好用的maven仓库点的 maven 仓库

成功是要付出代价的,那你还愿意付出吗
Maven中央仓库地址整理
最近做项目的时候,一直发现常用的oschina maven源一直都没有反应,后面发现原来oschina竟然关闭了maven源服务,后面经同事推荐了阿里云的maven源,这速度杠杠的
Maven 中央仓库地址:
1、http://www.sonatype.org/nexus/
私服nexus工具使用
2、http://mvnrepository.com/ (推荐)
3、http://repo1.maven.org/maven2
4、http://maven.aliyun.com/nexus/content/groups/public/
(强力推荐)
5、http://repo2.maven.org/maven2/ 私服nexus工具使用
6、http://uk.maven.org/maven2/
7、http://repository.jboss.org/nexus/content/groups/public
8、http://maven.oschina.net/content/groups/public/
oschina可惜啦,以前一直用这个,不过现在有阿里云来擦屁股啦
9、http://mirrors.ibiblio.org/maven2/
10、http://maven.antelink.com/content/repositories/central/
11、http://nexus.openkoala.org/nexus/content/groups/Koala-release/
12、http://maven.tmatesoft.com/content/groups/public/
其实,国内maven镜像虽然快,但是更新比较慢,国外的仓库由于国内网络的原因,下载简直不能忍,但是更新很快,可以根据自身的情况选择,有些人会花些钱开代理访问外网比较快,建议使用原装。下面是maven库配置
&id&oschina-repo&/id&
&name&开源中国镜像&/name&
&mirrorOf&central&/mirrorOf&
&url&可以根据自己的网络情况选填上面的url&/url&
其实不管是配置哪个地址,个人觉得还是创建一个私人nexus仓库比较好~ 这样团队能够分享,也不用过多的下载版本
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!随笔-1892&
在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。
Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)
任何的构件都有唯一的坐标,Maven根据这个坐标定义了构件在仓库中的唯一存储路径,
解读Maven在仓库中的存储路径:
1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 &"." &转换成 "/" ; example: org.testng ---&org/testng
2.基于artifactId准备路径,将artifactId连接到后面:org/testng/testng
3.使用version准备路径,将version连接到后面:org/testng/testng/5.8
4.将artifactId于version以分隔符连字号连接到后面:org/testng/testng/5.8/tesng-5.8
5.判断如果构件有classifier,就要在 第4项 后增加&分隔符连字号 再加上 classifier,org/testng/testng/5.8/tesng-5.8-jdk5
6.检查构件的extension,如果extension存在,则加上句点分隔符和extension,而extension是由packing决定的,org/testng/testng/5.8/tesng-5.8-jdk5.jar
到这里我们就明白了Maven 对于构件存储的细节。
Maven 仓库的分类:
maven的仓库只有两大类:
1.本地仓库
2.远程仓库,在远程仓库中又分成了3种:
2.1 中央仓库
2.3 其它公共库
1.本地仓库
顾名思义,就是Maven在本地存储构件的地方。
注:maven的本地仓库,在安装maven后并不会创建,它是在第一次执行maven命令的时候才被创建
maven本地仓库的默认位置:无论是Windows还是Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven仓库的默认位置
如何更改maven默认的本地仓库的位置:这里要引入一个新的元素:localRepository,它是存在于maven的settings.xml文件中
1.1 更改配置用户范围的本地仓库:
先在/.m2/目录下创建settings.xml文件,然后在~/.m2/settings.xml,设置localRepository元素的值为想要的仓库地址
&settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"&
&!-- localRepository
| The path to the local repository maven will use to store artifacts.
| Default: ${user.home}/.m2/repository--&
&localRepository&D:/myworkspace/maven_repository&/localRepository&
&!-- interactiveMode
| This will determine whether maven prompts you when it needs input. If set to false,
| maven will use a sensible default value, perhaps based on some other setting, for
| the parameter in question.
| Default: true
&interactiveMode&true&/interactiveMode&
这时候,maven的本地仓库地址就变成了&D:\maven_new_repository ,注:此时配置的maven的本地仓库是属于用户范围的。
1.2 更改配置全局范围的本地仓库:
在M2_HOME/conf/settings.xml(D:\soft\maven\apache-maven-3.3.3\confsettings.xml\settings.xml)中更改配置,更改配置的方法同上
注:此时更改后,所有的用户都会受到影响,而且如果maven进行升级,那么所有的配置都会被清除,所以要提前复制和备份M2_HOME/conf/settings.xml文件
故:一般情况下不推荐配置全局的settings.xml
1.3 工程使用仓库配置的优先级顺序
这个确实是有个优先级的,应该是pom&用户级别&全局级别例:如果pom中不配置,就取用户级别,如果用户级别也没有配置,就取全局级别
2. 远程仓库
2.1 说到远程仓库先从 最核心的中央仓库开始,中央仓库是默认的远程仓库,maven在安装的时候,自带的就是中央仓库的配置
在maven的聚合与继承中我们说过,所有的maven项目都会继承超级pom,具体的说,包含了下面配置的pom我们就称之为超级pom
&repositories&
&repository&
&id&central&/id&
&name&Central Repository&/name&
&url&http://repo.maven.apache.org/maven2&/url&
&layout&default&/layout&
&snapshots&
&enabled&false&/enabled&
&/snapshots&
&/repository&
&/repositories&
中央仓库包含了绝大多数流行的开源Java构件,以及源码、作者信息、SCM、信息、许可证信息等。一般来说,简单的Java项目依赖的构件都可以在这里下载得到。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
Maven私服的 个特性:
1.节省自己的外网带宽:减少重复请求造成的外网带宽消耗
2.加速Maven构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低
3.部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用
4.提高稳定性,增强控制:Internet不稳定的时候,maven构建也会变的不稳定,一些私服软件还提供了其他的功能
5.降低中央仓库的负荷:maven中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力
当前主流的maven私服:
1.Apache的Archiva
2.JFrog的Artifactory
3.Sonatype的Nexus
三、远程仓库配置
配置远程仓库将引入新的配置元素:&repositories& & & &repository&
在&repositories&元素下,可以使用& &repository&子元素声明一个或者多个远程仓库。
&repositories&
&repository&
&id&jboss&/id&
&name&JBoss Repository&/name&
&url&http://repository.jboss.com/maven2/&/url&
&releases&
&updatePolicy&daily&/updatePolicy&&!-- never,always,interval n --&
&enabled&true&/enabled&
&checksumPolicy&warn&/checksumPolicy&&!-- fail,ignore --&
&/releases&
&snapshots&
&enabled&false&/enabled&
&/snapshots&
&layout&default&/layout&
&/repository&
&/repositories&
&updatePolicy&元素:表示更新的频率,值有:never, always,interval,daily, daily 为默认值
&checksumPolicy&元素:表示maven检查和检验文件的策略,warn为默认值
出于安全方面的考虑,有时我们要对远程仓库的访问进行认证,一般将认证信息配置在settings.xml中:
&id&same with repository id in pom&/id&
&username&username&/username&
&password&pwd&/password&
&/servers&
注:这里的id必须与POM中需要认证的repository元素的Id一致。
如何将生成的项目部署到远程仓库
完成这项工作,也需要在POM中进行配置,这里有新引入了一个元素:&distributionManagement&
distributionManagement包含了2个子元素:repository和snapshotRepository, 前者表示发布版本构件的仓库,后者表示快照版本的仓库
这两个元素都需要配置 id(该远程仓库的唯一标识),name,url(表示该仓库的地址)
向远程仓库中部署构件,需要进行认证。配置同上
配置正确后运行: mvn clean deploy
正确的看待快照
之前我们在配置pom的时候,对于快照的配置都很谨慎,或者说很少用快照的版本,原因是它还很不稳定,极容易给我们的系统带来未知的错误,让我们很难查找。其实快照版本也并不是一无是处,快照最大的用途是用在开发的过程中,尤其是有模块依赖的时候,比如说AB两个模块同时开发,A依赖于B,开发过程中AB都是持续集成的开发,不断的修改POM文件和构建工程,这时候版本同步就成了一个很大的问题。使用快照就可以达到这一目的。
其实在快照版本在发布的过程中,Maven会自动为构件以当前时间戳做标记,有了这个时间戳,我们就可以随时找到最新的快照版本,这样也就解决刚才说的 协作开发的问题。
至于A如何检查B的更新,刚刚在讲配置的时候说过,快照配置中有一个元素可以控制检查更新的频率------updatePolicy
我们也可以使用命令行加参数的形式强制执行让maven检查更新:
mvn clean install-U
maven到底是如何从仓库中解析构件的呢?----maven从仓库解析依赖的机制
1. 当依赖的范围是system的时候,Maven直接从本地文件系统解析构件
2. 根据依赖坐标计算仓库路径后,尝试直接从本地仓库寻找构件,如果发现相应构件,则解析成功
3. 在本地仓库不存在相应的构件情况下,如果依赖的版本是显示的发布版本构件,则遍历所有的远程仓库,发现后下载使用
4. 如果依赖的版本是RELEASE或LATEST, 则基于更新策略读取所有远程仓库的元数据,将其于本地仓库的对应元数据合并后,计算出RELEASE或者LATEST的真实值,然后基于这个真实值检查本地仓库
5. 如果依赖的版本是SNAPSHOT, 则基于更新策略读取所有远程仓库的元数据, 将其与本地仓库的对应元数据合并后,得到最新快照版本的值,然后基于该值检查本地仓库或从远程仓库下载
6. 如果最后解析到的构件版本是时间戳格式的快照,则复制其时间戳格式的文件 至 非时间戳格式,并使用该非时间戳格式的构件
注:一定要记得&release& &&enabled& & & & & &&snapshot& &&enabled& ,对于快照也是一样
在POM的依赖声明的时候不推荐使用LATEST & RELEASE, 在Maven3中也不再支持在插件配置中使用LATEST & RELEASE, 如果不设置插件版本,那么最终版本和release一样,
maven只会解析最新的发布版本构建。
1.远程仓库的配置
在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他远程仓库中有,如JBoss Maven仓库。这时,可以在pom.xml中配置该仓库,代码如下:
&!-- 配置远程仓库 --&
&repositories&
&repository&
&id&jboss&/id&
&name&JBoss Repository&/name&
&url&http://repository.jboss.com/maven2/&/url&
&releases&
&enabled&true&/enabled&
&updatePolicy&daily&/updatePolicy&
&/releases&
&snapshots&
&enabled&false&/enabled&
&checksumPolicy&warn&/checksumPolicy&
&/snapshots&
&layout&default&/layout&
&/repository&
&/repositories&
repository:在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。
id:仓库声明的唯一id,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他仓库声明也使用该id,就会覆盖中央仓库的配置。
name:仓库的名称,让我们直观方便的知道仓库是哪个,暂时没发现其他太大的含义。
url:指向了仓库的地址,一般来说,该地址都基于http协议,Maven用户都可以在浏览器中打开仓库地址浏览构件。
releases和snapshots:用来控制Maven对于发布版构件和快照版构件的下载权限。需要注意的是enabled子元素,该例中releases的enabled值为true,表示开启JBoss仓库的发布版本下载支持,而snapshots的enabled值为false,表示关闭JBoss仓库的快照版本的下载支持。根据该配置,Maven只会从JBoss仓库下载发布版的构件,而不会下载快照版的构件。
layout:元素值default表示仓库的布局是Maven2及Maven3的默认布局,而不是Maven1的布局。基本不会用到Maven1的布局。
其他:对于releases和snapshots来说,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。
元素updatePolicy用来配置Maven从远处仓库检查更新的频率,默认值是daily,表示Maven每天检查一次。其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔X分钟检查一次更新(X为任意整数)。
元素checksumPolicy用来配置Maven检查校验和文件的策略。当构建被部署到Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven会验证校验和文件,如果校验和验证失败,当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其他可用的值包括:fail-Maven遇到校验和错误就让构建失败;ignore-使Maven完全忽略校验和错误。
2.远程仓库的认证
大部分公共的远程仓库无须认证就可以直接访问,但我们在平时的开发中往往会架设自己的Maven远程仓库,出于安全方面的考虑,我们需要提供认证信息才能访问这样的远程仓库。配置认证信息和配置远程仓库不同,远程仓库可以直接在pom.xml中配置,但是认证信息必须配置在settings.xml文件中。这是因为pom往往是被提交到代码仓库中供所有成员访问的,而settings.xml一般只存在于本机。因此,在settings.xml中配置认证信息更为安全。
1 &settings&
&!--配置远程仓库认证信息--&
&id&releases&/id&
&username&admin&/username&
&password&admin123&/password&
&/servers&
12 12 &/settings&
上面代码我们配置了一个id为releases的远程仓库认证信息。Maven使用settings.xml文件中的servers元素及其子元素server配置仓库认证信息。认证用户名为admin,认证密码为admin123。这里的关键是id元素,settings.xml中server元素的id必须与pom.xml中需要认证的repository元素的id完全一致。正是这个id将认证信息与仓库配置联系在了一起。
3.部署构件至远程仓库
我们使用自己的远程仓库的目的就是在远程仓库中部署我们自己项目的构件以及一些无法从外部仓库直接获取的构件。这样才能在开发时,供其他对团队成员使用。
Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构件部署到远程仓库中。首先,需要编辑项目的pom.xml文件。配置distributionManagement元素,代码如下:
1 &distributionManagement&
&repository&
&id&releases&/id&
&name&public&/name&
&url&http://59.50.95.66:8081/nexus/content/repositories/releases&/url&
&/repository&
&snapshotRepository&
&id&snapshots&/id&
&name&Snapshots&/name&
&url&http://59.50.95.66:8081/nexus/content/repositories/snapshots&/url&
&/snapshotRepository&
12 &/distributionManagement&
distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本(稳定版本)构件的仓库,后者表示快照版本(开发测试版本)的仓库。这两个元素都需要配置id、name和url,id为远程仓库的唯一标识,name是为了方便人阅读,关键的url表示该仓库的地址。
往远程仓库部署构件的时候,往往需要认证,配置认证的方式同上。
配置正确后,运行命令mvn clean deploy,Maven就会将项目构建输出的构件部署到配置对应的远程仓库,如果项目当前的版本是快照版本,则部署到快照版本的仓库地址,否则就部署到发布版本的仓库地址。
快照版本和发布版本的区别请自行上百度查阅资料。
4.配置远程仓库的镜像
如果仓库X可以提供仓库Y存储的所有内容,那么就可以认为X是Y的一个镜像。换句话说,任何一个可以从仓库Y获得的构件,都能够从它的镜像中获取。举个例子,http://maven.oschina.net/content/groups/public/ 是中央仓库http://repo1.maven.org/maven2/ 在中国的镜像,由于地理位置的因素,该镜像往往能够提供比中央仓库更快的服务。因此,可以配置Maven使用该镜像来替代中央仓库。编辑settings.xml,代码如下:
1 &mirrors&
&id&maven.oschina.net&/id&
&name&maven mirror in China&/name&
&url&http://maven.oschina.net/content/groups/public/&/url&
&mirrorOf&central&/mirrorOf&
8 &/mirrors&
该例中,mirrorOf的值为central,表示该配置为中央仓库的镜像,任何对于中央仓库的请求都会转至该镜像,用户也可以使用同样的方法配置其他仓库的镜像。id表示镜像的唯一标识符,name表示镜像的名称,url表示镜像的地址。
关于镜像的一个更为常见的用法是结合私服。由于私服可以代理任何外部的公共仓库(包括中央仓库),因此,对于组织内部的Maven用户来说,使用一个私服地址就等于使用了所有需要的外部仓库,这可以将配置集中到私服,从而简化Maven本身的配置。在这种情况下,任何需要的构件都可以从私服获得,私服就是所有仓库的镜像。这时,可以配置这样的一个镜像:
1 &!--配置私服镜像--&
2 &mirrors&
&id&nexus&/id&
&name&internal nexus repository&/name&
&url&http://183.238.2.182:8081/nexus/content/groups/public/&/url&
&mirrorOf&*&/mirrorOf&
9 &/mirrors&
该例中&mirrorOf&的值为星号,表示该配置是所有Maven仓库的镜像,任何对于远程仓库的请求都会被转至http://183.238.2.182:8081/nexus/content/groups/public/。如果该镜像仓库需要认证,则配置一个id为nexus的认证信息即可。
需要注意的是,由于镜像仓库完全屏蔽了被镜像仓库,当镜像仓库不稳定或者停止服务的时候,Maven仍将无法访问被镜像仓库,因而将无法下载构件。
5.可用的Maven镜像仓库
&id&repo2&/id&
&mirrorOf&central&/mirrorOf&
&name&Human Readable Name for this Mirror.&/name&
&url&http://repo2.maven.org/maven2/&/url&
&id&ui&/id&
&mirrorOf&central&/mirrorOf&
&name&Human Readable Name for this Mirror.&/name&
&url&http://uk.maven.org/maven2/&/url&
&id&ibiblio&/id&
&mirrorOf&central&/mirrorOf&
&name&Human Readable Name for this Mirror.&/name&
&url&http://mirrors.ibiblio.org/pub/mirrors/maven2/&/url&
&id&jboss-public-repository-group&/id&
&mirrorOf&central&/mirrorOf&
&name&JBoss Public Repository Group&/name&
&url&http://repository.jboss.org/nexus/content/groups/public&/url&
&id&JBossJBPM&/id&
32     &mirrorOf&central&/mirrorOf&
33     &name&JBossJBPM Repository&/name&
34     &url&https://repository.jboss.org/nexus/content/repositories/releases/&/url&
上面的仓库经过测试是可以访问的。
6.仓库搜索服务地址
Sonatype Nexus:https://repository.sonatype.org/
MVNrepository:http://mvnrepository.com/
关于依赖的搜索,个人觉得这两个是最好用的。
结束语:要得到你必须要付出,要付出你还要学会坚持,如果你真的觉得很难,那你就放弃,但是你放弃了就不要抱怨,世界真的是平衡的,我觉得人生就是这样,每个人都是通过自己的努力,去决定自己生活的样子。
阅读(...) 评论()博客分类:
我分两部分来介绍,首先介绍一下Maven的仓库,然后在说一下如何通过Nexus来建立我们自己的仓库,以及如何使用。
Maven 仓库
在以前使用Ant的时候,我们会建立一个lib目录在存放我们的jar包,比如项目所依赖的第三方包,每建立一个项目都要建立一个lib,不停的做copy工作,不仅是对于磁盘的浪费,而且也造成了版本管理上的麻烦。而且我们还需要通过提交到svn上来对lib进行管理,但是svn对于这种二进制文件的管理并不出色。
Maven仓库的初衷就是为了解决这个问题。 maven仓库是所有常用的第三方依赖包的集中营。这样所有的Maven项目就可以从这个仓库中获取所需要的资源,Maven仓库中对jar通过Group Id, Atifact Id, version 来管理,所以Maven项目可以很方便的进行依赖管理。你不需要自己来管理这个庞大的资源仓库,当然你可以创建一个公司层面的仓库,这个我在这个章节的后面会介绍。
Maven 仓库的两个概念:本地仓库和远程仓库
本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能发生在有些jar包的新版本没有在Maven仓库中及时更新。
Maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml 配置这个地址:
&settings&
&localRepository& D:/java/repository&/localRepository&
&/settings&
如果你想让所有的用户使用统一的配置,那么你可以修改${M2_HOME}/conf/setting.xml
还可以通过在运行时指定目录(不推荐这么做):
mvn clean install -Dmaven.repo.local=/home/juven/myrepo/
当我们创建一个简单的Maven项目后(只需要在pom.xml配置好依赖项),运行mvn clean install就可以把项目构建好,maven会自动从中央仓库下载所需的依赖项(即jar包)。这个中央仓库定义在${M2_HOME}/lib/maven-2.0.10-uber.jar 里面。你可以在里面找到/org/apache/maven/project/pom-4.0.0.xml这个文件,在这个文件里面定义了中央仓库的地址:
&repositories&
&repository&
&id& central&/id&
&name& Maven Repository Switchboard&/name&
&layout& default&/layout&
&url&http://repo1.maven.org/maven2&/url&
&snapshots&
&enabled& false&/enabled&
&/snapshots&
&/repository&
&/repositories&
在 POM 中配置远程仓库
当某个依赖项存在于第三方的公共仓库时,我们需要配置其他远程仓库呢。下面是在pom.xml里面配置一个远程仓库的例子:
&repositories&
&repository&
// 其他远程仓库
&/repository&
&repository&
&id& maven-net-cn&/id&
&name& Maven China Mirror&/name&
&url& http://maven.net.cn/content/groups/public/&/url&
&releases&
&enabled& true&/enabled&
&/releases&
&snapshots&
&enabled& false&/enabled&
&/snapshots&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
// 其他maven插件仓库
&/pluginRepository&
&pluginRepository&
&id& maven-net-cn&/id&
&name& Maven China Mirror&/name&
&url& http://maven.net.cn/content/groups/public/&/url&
&releases&
&enabled& true&/enabled&
&/releases&
&snapshots&
&enabled& false&/enabled&
&/snapshots&
&/pluginRepository&
&/pluginRepositories&
这里我们可以看到,允许配置多个repository和 plugin repository,其中&releases&&enabled&true&/enabled&&/releases&告诉Maven可以从这个仓库下载releases版本的构件,而&snapshots&&enabled&false&/enabled&&/snapshots&告诉Maven不要从这个仓库下载snapshot版本的构件。
Maven在使用第三方构件和插件时是分开来配置的,所以如果我们也希望插件的下载也通过我们的本地仓库来下载,那么我们就需要配置pluginRepository.
之所以不允许从某些仓库下载snapshot版本,是因为snapshot版本不稳定,但是某些snapshot版本,比如公司内部正在开发的项目, 是必须的
至于&pluginRepositories&,这是配置Maven从什么地方下载插件构件,Maven的所有行为都是通过插件来完成的。 &pluginRepository&的配置与&repository&类似,这里就不多说了。
在 settings.xml 中配置远程仓库
pom.xml的作用范围限于一个项目, 但一个公司/组织通常不只开发一个项目,那么为了避免重复配置,那么我们可以把一些公共配置放在${MAVEN_HOME}/conf/setting.xml(或${user.home}/.m2/setting.xml中。下面是在setting.xml中配置一个远程仓库的例子.
&settings&
&profiles&
&/profile&
&id&myProfiel&/id&
&/profile&
&/profiles&
&activeProfiles&
&activeProfile&myProfiel&/activeProfile&
&/activeProfiles&
&/settings&
这里通过&activeProfile&元素来激活这个profile,这样我们就可以全局的使用这个配置,不再需要为每个POM做重复的配置了(也可以针对特定的条件激活,比如某些profile只有在使用JDK 1.4时才生效)。
在实际的操作过程中,setting.xml最好不要配置远程仓库,最好能够通过nexus建立公司或者组织自己的仓库,然后把地址指向自己的仓库,后面我会介绍为什么要这么做以及怎么做。
配置maven仓库镜像
当你连接中央仓库时速度很慢,或有些国外的第三方仓库无法被访问时,你可以在setting.xml中为这些仓库指定一个镜像来加快下载依赖项的速度。下面是一个配置镜像的例子
&settings&
&id& maven-net-cn&/id&
&name& Maven China Mirror&/name&
&url& http://maven.net.cn/content/groups/public/&/url&
&mirrorOf&central&/mirrorOf&
&/mirrors&
&/settings&
这里的 &mirrorOf&必须指定某个&repository&的Id. 如果想为所有的仓库做镜像, 那么可以改为:&mirrorOf&*&/mirrorOf&
利用 Nexus 来构建企业级 Maven 仓库
Nexus是一个Maven仓库管理器,用来搭建私有仓库服务器。建立公司/组织的私有仓库的的好处是便于管理,节省公网带宽,利用内网下载依赖项速度快,还有一个非常有用的功能就是能有效管理内部项目的SNAPSHOT版本,实现各个模块间的共享.
安装 Nexus
可以从 获取最新版本的nexus,本文以1.3.4为例进行说明。
Nexus提供了两种安装方式,内嵌Jetty的捆绑包(bundle)和WAR包。前者解压后即可单独运行,只要系统中安装了JRE, 后者需要一个Servlet容器来运行.
使用捆绑包安装
如果你使用Windows,那么下载nexus-webapp-1.3. 4-bundle.zip,并将其解压至任意目录,如D:/tools,然后转到D:\tools\nexus-webapp-1.3.4\bin\jsw\indows-x86-32 ,双击运行Nexus.bat。 如果你是在linux下安装,那么就下载nexus-webapp-1.3. 4 -bundle.tar.gz,解压后运行nexus.sh。nexus还支持solaris,macos等操作系统。
当你在控制台看到“Started SelectChannelConnector@0.0.0.0:8081”之后,说明Nexus启动成功了。 打开浏览器,访问http://127.0.0.1:8081/nexus,使用管理员的帐号(admin)和密码(admin123)登录, 会看到如下的页面:
在这里可以进行管理仓库,配置Nexus系统,管理任务,管理用户,角色,权限,查看系统的RSS源,管理及查看系统日志等操作。
使用War包安装
下载WAR包,然后将其发布到servlet容器中即可
到此我们已经安装好Nexus,下面介绍一下Nexus常用的功能和使用方法。
配置中央仓库
在左边菜单栏里选择Repositories, 会看到如下的界面:
其中右边栏上半部分列出当前nexus管理的repository,黑体字是类型为group的repository. 这里简单介绍下几种repository的类型:
hosted,本地仓库。通常我们会部署自己的构件到这一类型的仓库。比如公司/组织开发的项目
proxy,代理仓库,它们被用来代理远程的公共仓库,如maven中央仓库或一些第三方公共仓库。
group,仓库组,用来合并多个hosted/proxy仓库,当你的项目希望在多个repository使用依赖项时,无需引用多个仓库了,只需要引用一个类型为group的repository即可。
Maven central是Maven的中央仓库,点击它并选择configuration标签栏,我们会看到下面的页面:
这里有几个配置项是经常用到的:
Override local storage location:
该选项允许配置 Nexus本地仓库的存放地址,用来覆盖其默认的存放地址
Remote storage location: 该选项允许配置远程仓库的地址。一般为了提高代理速度,你可以将其修改为国内的镜像地址。默认值是http://repo1.maven.org/maven2/
Download remote indexes: 该选项配置是否下载远程索引文件。 建议配置为true,这样我们便可以通过nexus的搜索功能来搜索我们需要的依赖项。
添加代理仓库(proxy)
nexus默认提供了Maven central这个代理仓库,如果你需要添加其他代理仓库,那么可以点击左边栏页面上的Repositories链接,然后在右边栏页面上依次点击add -& add proxy repository, 随后出现以下页面:
根据提示填写相关信息保存即可。
管理本地仓库(hosted)
Nexus预定义了三种本地仓库,分别是Releases, Snapshots, 3rd Party. 下面分别介绍一下这三种类型仓库的作用
存放稳定版本的构件。比如我们完成了一个版本的下数组件的开发,就可以把它发布到这里。
Snapshots: 存放快照版本的构件。 比如一个下数组件在完成所有开发和测试工作之前,是不应该发布到release仓库的,但可能其他项目只需用到这个组件的某些接口,只要这些接口完成了开发并通过测试,就可以拿来使用, 从而实现多个项目并行开发。
3rd Party:
存放其他第三方构件。你可能会问, 不是有中央仓库和其他第三方公共仓库来管理这些依赖项了吗?没错。但由于某些开源项目出现的时间比maven要早,因此他们大都没有采用maven方式进行构建。 其他还包括包括一些非开源或使用maven 1.x构建的组件. 我们可以把这类组件通通添加到这里。创建本地仓库的方法很简单。点击Repository面板上方的Add按钮,然后选择Hosted Repository,然后在下方的配置面板中输入相关信息。 注意根据自己的需要选择本地仓库的类型
仓库组(group)
通过前面介绍我们了解到, 可以建立多个代理仓库和本地仓库. 但如果没有仓库组的概念,那么当需要引用这些仓库时, 就需要将他们逐个添加到pom.xml或setting.xml. 仓库组是为了简化仓库的引用而提出的。有了仓库组的概念, 我们可以把仓库根据不同目的进行分组,比如把常用的归到一组或根据访问权限分组, 然后直接声明引用某个仓库组即可. 下面是pom.xml中声明引用一个nexus仓库组的例子:
&repositories&
&repository&
&id&nexus-public&/id&
&url&http://127.0.0.1:8081/nexus/content/groups/public/&/url&
&releases&
&enabled&true&/enabled&
&/releases&
&snapshots&
&enabled&true&/enabled&
&/snapshots&
&/repository&
&/repositories&
可以看到声明引用一个仓库组和一个普通的远程仓库,配置的写法完全一样。
maven本身没有仓库组的概念
Nexus中预设了2个仓库组, 分别是public repositories和public snapshot repositories. 如图:
public repository默认包含本地仓库的Releases, snapshots和3rd party以及代理仓库的Maven Central. 你可以在Configuration配置页添加其他仓库到这个仓库组。 如果需要,你还可以创建一个仓库组,方法是点击 Add-&Repository Group, 当New Repository Group界面后,填入ID, name 等相关信息, 然后在右边Available Repositories 栏里可以选择你要添加的仓库到你新建的仓库组.
通过 Nexus 搜索构件
在开发过程中过程中,我们往往只记得某个构件的大致名字,这时我们可以通过nexus提供的构件搜索功能查询该构件的完整配置信息(groupId,artifactId,version).如果通过nexus搜不到某个的构件,那说明这个构件不在当前nexus所登记的仓库中,可能需要添加额外的代理仓库或手工上传某个构件。
在使用nexus的搜索功能之前,必须先让nexus所登记的仓库建立索引文件, Nexus默认是不为每个仓库建立索引文件的,因为建立像中央仓库这样的索引文件需要耗费比较大的网络带宽和事件,仅索引文件就要几十兆. 要开启中央仓库的索引文件下载功能需要在Maven Central的配置页中, 把Download Remote Indexes改为true. 如图:
这样设置之后, Nexus会自动从远程中央仓库下载索引文件, 为了检验索引文件自动下载是否生效,可以切换到Browse标签页,如图:
如果出现类似于以上文件夹,那说明索引文件已经建立成功.
下面我们试一下搜索功能,
搜索栏输入testing, 查询结果如下:
这是模糊查询的结果,当然如果你知道更多信息,比如版本号等,你可以使用高级搜索,点击高级搜索后,右边界面会提供集中搜索方式:keyword, classname, GAV, checksum
比如我们这里选择GAV模式. 假设我只知道artifact的名字(如testng)和版本号(如5.8), 其他的我不知道, 那么就在artifact 和 version处分别输入testng 和 5.8 , 搜索结果如下:
如果你不知道知道构件的名称, 只知道classname, 那么你也可以通过class name 的方式搜索,这里就不再赘述。
当你选中某项搜索结果, 页面的下方会出现这个构件的详细信息, 并且会列出这个构件的Maven依赖配置, 你可以直接拷贝到你的pom文件中使用,这是个非常实用的功能:
在 Maven 中使用Nexus
到此我们介绍了如何安装和使用Nexus以及其基本配置, 那么如何在Maven来使用Nexus本地仓库呢?其实和配置远程仓库的方法一样。下面是在settings.xml中添加了一个nexus本地仓库的例子:
&profiles&
&id&dev&/id&
&repositories&
&repository&
&id&nexus&/id&
&url&http://127.0.0.1:8081/nexus/content/groups/public/&/url&
&releases&
&enabled&true&/enabled&
&/releases&
&snapshots&
&enabled&true&/enabled&
&/snapshots&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
&id&nexus&/id&
&url&http://127.0.0.1:8081/nexus/content/groups/public&/url&
&releases&
&enabled&true&/enabled&
&/releases&
&snapshots&
&enabled&true&/enabled&
&/snapshots&
&/pluginRepository&
&/pluginRepositories&
&/profile&
&/profiles&
&activeProfiles&
&activeProfile&dev&/activeProfile&
&/activeProfiles&
你也可以在pom.xml中声明引用某个nexus仓库。
有些时候我们需要部署构件到Nexus的3rd party, 比如我们在中央仓库找不到我们需要的构件, 我们可以通过Nexus的UI界面来上传构件:
点击左边菜单栏的 Repositories, 然后点击右边界面的3rd party, 选择界面下方的Artifact Upload, 这个时候出现以下界面:
上传构件需要两个步骤,一个是定义文件的上传,再就是构件的实体文件.第一部分定义文件可以是POM文件, 这也是比较推荐的方式, 如果没有pom文件,可以选择以参数的形式输入。第二部分是上传构件的实体文件。这里简单说一下Classifier和Extension, 这两个都是选填项. Classifier用来区别同功能的构件用于不同的场景, 比如这个构件是分别针对JDK14和JDK15做了2个功能一样的Jar, 这个时候你就需要指定这个构件的Classifier为JDK14还是JDK15. Extension是指扩展名,如果不提供,那么会自动取这个构件的Packaging Type作为扩展名, 比如ear, jar, war 等等. (Packaging Type是在第一步中通过pom文件或者手工输入得到的)
刚才说了3rd party的部署, 对于releases 和 snapshots的部署也是一样的操作过程.
一般我们会通过UI 界面来部署一些缺失的构件。对于自己开发的构件还有另一种简单的部署方式, 即通过命令mvn deploy进行部署。但使用这种部署方式需要在pom.xml中添加一些配置,比如:
&distributionManagement&
&repository&
&id&nexus-releases&/id&
&name&Nexus Release Repository&/name&
&url&http://127.0.0.1:8081/nexus/content/repositories/releases/&/url&
&/repository&
&snapshotRepository&
&id&nexus-snapshots&/id&
&name&Nexus Snapshot Repository&/name&
&url&http://127.0.0.1:8081/nexus/content/repositories/snapshots/&/url&
&/snapshotRepository&
&/distributionManagement&
&/project&
这里告诉Maven当我要发布release版本或者snapshot版本时,把构建好的成品上传到哪个服务器地址。
最后还要在setting.xml里面配置一个有部署权限的Nexus的帐号和密码
&settings&
&id& nexus-releases&/id&
&username&admin&/username&
&password&admin123&/password&
&id& nexus-snapshots&/id&
&username&admin&/username&
&password&admin123&/password&
&/servers&
&/settings&
至此 我们就可以通过命令mvn deploy来发布我们项目到本地仓库了.
这里我们使用了admin来进行部署,一般建议使用一个具有部署权限的账号执行部署操作。
1、 发现配置了nexus仓库组之后,下载构件抛异常
0-10-3 下午05时09分43秒: Build error for /com.newyulong.iptv.domain.entity/pom. org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-resources-plugin:2.4.1 or one of its dependencies could not be resolved: Missing:----------1) org.apache.maven.plugins:maven-resources-plugin:maven-plugin:2.4.1
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.maven.plugins -DartifactId=maven-resources-plugin -Dversion=2.4.1 -Dpackaging=maven-plugin -Dfile=/path/to/file
Alternatively, if you host your own repository you can deploy the file there:
mvn deploy:deploy-file -DgroupId=org.apache.maven.plugins -DartifactId=maven-resources-plugin -Dversion=2.4.1 -Dpackaging=maven-plugin -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
----------1 required artifact is missing.
for artifact:
org.apache.maven.plugins:maven-resources-plugin:maven-plugin:2.4.1
from the specified remote repositories:
Nexus ( , releases=true, snapshots=false)
这里的主要原因是配置nexus里面的Public Repositories 顺序和条件出错,导致不能下载构件。比如这个public repositories:
这个是正确的配置顺序。其中左边的是正在使用的定义好的仓库,右边的是候选的仓库。在这个例子中,nexus下载构件的顺序是Releases --&Snapshots --& 3rd party --& Maven Central。
好多公司处于安全考虑,要求使用用代理访问公网,而nexus经常需要往maven repository中心下载东西,因此需要给nexus的仓库设置代理。
浏览: 30787 次
来自: 北京
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 maven仓库 的文章

 

随机推荐