搭建自己的maven私服,原因有三个:
1、maven自己的中央库访问速度比较慢,伟大的墙再一闹腾,会时断时续。
2、有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用。这种情况我们需要把jar包手动上传到私服。
3、公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面。
私服的数据源
私服里面绝大多数的jar包都来自另外一个私服或者中央仓库。
所以第一件事情是指定私服的数据来源。
Nexus默认设置为Maven中央仓库,但Maven中央仓库实在是太慢,不考虑。
国内稳定的maven镜像我了解的有两个, http://maven.oschina.net/content/groups/public/和http://mirrors.ibiblio.org/maven2/。
两个镜像都不可能和maven中央仓库完全一样,至少会有一定时间的延迟,某些maven中央仓库有的最新版本jar包可能要过一定的时间它们才有。
观察了一下,oschina更新频率更快一些,所以选择了oschina。一般无需太关心时延的问题,两个镜像绝大多数情况下都能满足需求。
私服数据来源设置步骤为, 先登陆,Repositories=>Central=>Configuration=>Remote Storage Location。请把Download Remote Indexes选择为True(默认为False),最后请一定记得点击Save按钮。
如何处理下载失败
pom.xml经常就报找不到某某某jar包的错,很烦很头疼。一句话,这个是网络的问题,下载失败。
正常情况下jar包存在于三个地方,Local仓库,Nexus私服仓库,maven中央仓库。
以所列出的顺序为准,搜索的过程由前往后,下载的过程由后往前。
下载过程分两段,maven中央仓库=>Nexus私服仓库,Nexus私服仓库=>Local仓库,两段都可能出问题。
出问题也没事,重试就行了呗,但maven会在Local仓库中生成一份以lastUpdated结尾的破文件,一个错误的缓存(cache)。要能正确重试,只能手动删除缓存。
先判断是哪一段出错,选择Repositories=>Central=>Brower Storage,
看一下对应的jar包在Nexus私服上面有没有,没有的话,说明maven中央仓库=>Nexus私服仓库下载失败,否则Nexus私服仓库=>Local仓库下载失败。
maven中央仓库=>Nexus私服仓库下载失败处理方法
删除Local仓库的缓存。打开~/.m2/repository文件夹,删除报错jar包所在的文件夹(也可以只删除特定的子文件,提高效率)。
删除Nexus私服仓库的缓存。Repositories=>Central=>Brower Storage,选择对应的目录树,右键先Expire Cache,后Delete。
Nexus私服仓库=>Local仓库下载失败处理方法
这种情况简单很多,只要删除Local仓库的缓存即可。