有成功使用过maven 配置oschinaa的Maven仓库的过来人吗,求帮我看看我怎么不能用

Maven详解之仓库------本地仓库、远程仓库
在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.2 私服 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&&&
&&&&&localRepository&D:\maven_new_repository&/localRepository&&&
&/settings&&&
这时候,maven的本地仓库地址就变成了&D:\maven_new_repository ,注:此时配置的maven的本地仓库是属于用户范围的。
1.2 更改配置全局范围的本地仓库:在M2_HOME/conf/settings.xml中更改配置,更改配置的方法同上
注:此时更改后,所有的用户都会受到影响,而且如果maven进行升级,那么所有的配置都会被清除,所以要提前复制和备份M2_HOME/conf/settings.xml文件
故:一般情况下不推荐配置全局的settings.xml
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&/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中:
&span&style="white-space:pre"&&&&&&/span&&servers&&&
&&&&&&&&&server&&&
&&&&&&&&&&&&&id&same&with&repository&id&in&pom&/id&&&
&&&&&&&&&&&&&username&username&/username&&&
&&&&&&&&&&&&&password&pwd&/password&&&
&&&&&&&&&/server&&&
&&&&&/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只会解析最新的发布版本构建。
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区国内有没有好点的maven仓库,我试了几个下载速度都超级慢....
开源中国的 Maven 仓库:不过几周前暂停了。
OpenKoala:&a href=&///?target=http%3A//nexus.openkoala.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Sonatype Nexus&i class=&icon-external&&&/i&&/a&&br&--------------------------------------------&br&请使用他们的central库,&br&&a href=&///?target=http%3A//nexus.openkoala.org/content/repositories/central/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Index of /repositories/central&i class=&icon-external&&&/i&&/a&
OpenKoala:--------------------------------------------请使用他们的central库,
已有帐号?
无法登录?
社交帐号登录
表达不清除有成功使用过OSChina的Maven仓库的过来人吗,求帮我看看我怎么不能用 - 开源中国社区
当前访客身份:游客 [
当前位置:
这个上面的说明配出的settings.xml文件如下:
&?xml version=&1.0&?&
&settings xmlns=&http://maven.apache.org/POM/4.0.0& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xsi:schemaLocation=&http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd&&
&localRepository&D:\apache-maven-3.2.1\repos&/localRepository&
&id&nexus-osc&/id&
&mirrorOf&central&/mirrorOf&
&name&Nexus osc&/name&
&url&http://maven.oschina.net/content/groups/public/&/url&
&id&nexus-osc-thirdparty&/id&
&mirrorOf&thirdparty&/mirrorOf&
&name&Nexus osc thirdparty&/name&
&url&http://maven.oschina.net/content/repositories/thirdparty/&/url&
&/mirrors&
&profiles&
&id&osc&/id&
&activation&
&activeByDefault&true&/activeByDefault&
&/activation&
&repositories&
&repository&
&id&nexus-osc&/id&
&url&http://maven.oschina.net/content/groups/public/&/url&
&/repository&
&repository&
&id&nexus-osc-thirdparty&/id&
&url&http://maven.oschina.net/content/repositories/thirdparty/&/url&
&/repository&
&/repositories&
&pluginRepositories&
&pluginRepository&
&id&nexus-osc&/id&
&url&http://maven.oschina.net/content/groups/public/&/url&
&/pluginRepository&
&/pluginRepositories&
&/profile&
&/profiles&
&/settings&
但是随便建了一个maven项目,然后招行mvn clean compile,还是会报以下错误:
[ERROR] Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to nexus-osc (http://maven.oschina.net/content/groups/public/): Connection reset -& [Help 1]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException
看起来根本没用上OSChina的maven仓库,是我配置有误吗?求过来人指点
---------------问题补充---------------
:话说有没有哪位仁兄有现成的亲测可用的settings.xml文件,求一个,我试试看行不行
共有3个答案
<span class="a_vote_num" id="a_vote_num_
Connection reset好像是网络问题吧! 你直接在你的浏览器里访问http://maven.oschina.net/content/groups/public试试看
--- 共有 3 条评论 ---
: 我觉得应该不关防火墙的事。因为我连公司的maven仓库没有任何问题,只是因为在家老是要登VPN才能用,所以就想换用OSC的,结果还用不了。。。
(2年前)&nbsp&
: 防火墙呢?
(2年前)&nbsp&
浏览器访问没有任何问题
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
我的配置:
& & & & &id&nexus-osc&/id&
& & & & &mirrorOf&*&/mirrorOf&
& & & & &name&Nexus osc&/name&
& & & & &url&http://maven.oschina.net/content/groups/public/&/url&
有时候,仓库上有些版本的插件不能下载使用,换个版本试试。
--- 共有 1 条评论 ---
修改后一样报上述错误
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
可以把原来得setting.xml备份下,然后直接下载oschina那个帮助页面里的,覆盖原来的
setting.xml,这样可以保证至少这个文件是正确的,如果还有问题再分析。
--- 共有 1 条评论 ---
已照做,结果是报一模一样的错误
(2年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
类似的话题开源中国 Maven 库 (maven.oschina.net) 上线
- 开源中国社区
当前访客身份:游客 [
当前位置:
开源中国 Maven 库 (maven.oschina.net) 上线
亲爱的小伙伴们,为了方便广大开发同学,开源中国特别推出国内的&Maven&中央库,提供高速稳定的网络和服务,为国内&Maven&使用者提供便捷的服务。
maven.oschina.net 是开源中国 &中国源& 项目的一个子系统,可通过以下网址访问:
关于使用开源中国 Maven 库的教程请看:
目前该系统还在测试阶段,我们会不断进行完善,包括与开源中国社区之间的紧密结合。
如果你在使用中遇见任何问题,请随时
Maven 的详细介绍:
Maven 的下载地址:
想通过手机客户端(支持 Android、iPhone 和 Windows Phone)访问开源中国:
旧一篇: 3年前
新一篇: 3年前
相关讨论话题
你也许会喜欢
这个给力~~ OSCHINA是我每日必上的网站~~
322楼:夲仒無道
碉堡了~OSC越来越强大了。。。
323楼:ilancome
搜spring webmvc
搜出来的不对啊
324楼:hellocc
包的版本 好像低了
325楼:聂华明
是干什么用的呀?我是安卓程序员
用的着吗?
326楼:陈康明
试用了一下,这个功能很给力~~~
327楼:huangzefeng
不赞下有点过不去啊,太给力啦!
328楼:菌瓜
貌似好多 jar都是比较旧的版本,
329楼:hlevel
330楼:程序猿小Z
331楼:夏天的老鼠
332楼:GreenArrow
主页一直loading nexus UI....
333楼:大宝SOD
客户端用的Sonatype Nexus吗?
334楼:廖凯
引用来自“GreenArrow”的评论主页一直loading nexus UI....主页马上要换新的了
335楼:郎来了
这个公司使用了maven都应该会在内网搭建一个nexus私服吧?
336楼:Cjie2000
试了。这速度。真心赞~~
337楼:孤单时会想你
链接挂掉了
338楼:红薯
引用来自“孤单时会想你”的评论
链接挂掉了已改,谢谢提醒
339楼:wangyan9110
340楼:juyouchina123
引用来自“huangzefeng”的评论不赞下有点过不去啊,太给力啦!即时通讯手机版 网页版和PC端三方互通
手机号: QQ: / /webim/index.html
与内容无关的评论将被删除,严重者禁用帐号
本周热点资讯
本站最新资讯maven地址不可用,有哪些建议 - 开源中国社区
当前访客身份:游客 [
当前位置:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':social_sdk_library_project')
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:recyclerview-v7:22.0.0'
compile 'com.android.support:support-v4:22.0.0'
compile 'com.loopj.android:android-async-http:1.4.6'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.jakewharton:butterknife:6.1.0'
compile 'com.github.chrisbanes.photoview:library:1.2.3'
compile 'com.umeng.analytics:analytics:5.5.2'
以上来自osc-android-app的依赖项,但是gradle构建时无法下载这些依赖库,后来使用osc的maven镜像,似乎也无法下载,可能没有。
allprojects {
repositories {
mavenCentral()
url 'http://maven.oschina.net/content/groups/public/'
url 'http://maven.oschina.net/content/repositories/thirdparty/'
这种情况下,怎么处理呢?有没有好的建议?还是自己一个一个地把这些类库下载下来?刚用android studio不久,对gradle的构建机制也是一知半解,求高手指导一下,谢谢。
共有1个答案
<span class="a_vote_num" id="a_vote_num_
换掉oschina的maven仓库,那个仓库慢的要死,甚至连官方仓库还不如。
我一般用的是ibiblio这个maven镜像库,在国内速度还行。http://mirrors.ibiblio.org/maven2/
另外就是,repositories仓库是从上到下优先级匹配的,如果在上面仓库能找到依赖项就不会往下走。所以你应该把速度快的仓库提上面,mavenCentral这样的仓库做备份库放下面才对。
如果你本地有~/.m2这样的maven本地仓库,还可以加上mavenLocal()这个仓库放第一优先级。
最后要提的就是,gradle是一个现代化的构建工具,很有搞头,建议看官方文档以及官方推荐的教材系统学习一下,这玩意现在在老外的开源项目中非常火。
--- 共有 1 条评论 ---
非常感谢你的回答,基本明白了。谢谢。
(1年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
ZigzagV...的其它问题
类似的话题

我要回帖

更多关于 oschina maven 关闭 的文章

 

随机推荐