最近正着手把公司内部的项目迁移到maven平台。需要搭建一个maven私服,选择的是Nexus(别和Google的Nexus手机混淆了)。至于为什么要搭建自己的maven私服,原因有三个:
- maven自己的中央库访问速度比较慢,伟大的墙再一闹腾,会时断时续。
- 有些jar包由于版权原因,maven中央仓库没有,比如oracle JDBC驱动。另外也会有一些项目中用到的比较老的开源jar包, 中央仓库也没用。这种情况我们需要把jar包手动上传到私服。
- 公司自己开发的jar包并不开源,不能上传到maven中央仓库,只能部署到私服上面。
至于如何安装Nexus 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仓库的缓存即可。步骤如上。
结语
万事万物有优点,也必定有缺点,maven也一样。个人感觉maven有些过于复杂了,入门比较难,另外也不够健壮,经常需要花很多时间去和错误和warning作斗争,累。