Nexus用来搭建一个自己的Maven仓库服务器也就是私服,我们正常情况下是去中央仓库去下载jar包,有了私服之后,我们是连接到私服去下载jar包,如果私服不能访问再到中央仓库去下载。搭建Nexus有什么好处呢?如果没有私服,团队中新来了一个成员,就要去中央仓库下载,因为中央仓库在国外,去中央仓库下载是很慢的,如果jar包很多的话可能要下个一天,不过这个我能想到两种解决方案,第一,直接去同事的电脑上把他的Maven仓库打包通过局域网或者移动硬盘等传输到自己的电脑上,第二,配一个国内速度比较快的镜像,比如阿里云的镜像,目前是我觉得速度最快的一个镜像了。
阿里云镜像:
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
看地址就知道,其实就是阿里云基于Nexus搭建的一个Maven仓库。但是如果你们的项目是分模块开发的,而且不同的人有些模块是没有权限访问的,只能是通过jar包的形式引进来,这种情况用镜像肯定是下不下来你们公司自己的jar包的,这时候就很有必要在公司搭建一个私服。
本文介绍在Linux的发行版CentOS7下的Nexus的安装
Nexus3.x下载地址:https://www.sonatype.com/download-oss-sonatype
Nexus的启动依赖于JDK,所以先安装配置好JDK
JDK8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
解压JDK,tar -zxvf jdk-8u121-linux-x64.tar.gz
修改配置文件,vi /etc/profile 在末尾加上:
JAVA_HOME=/usr/java/jdk1.8.0_121
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
执行 source /etc/profile 使配置文件生效
执行 java -version 如果出现jdk版本号说明jdk安装成功。
解压nexus,tar -zxvf nexus-3.2.1-01-unix.tar.gz
启动nexus, ./nexus-3.2.1-01/bin/nexus start
启动比较慢,需要等一会儿,再访问 http://${yourIp}:8081,如果不能访问,看下是不是没有开放8081端口,或者直接关闭防火墙。
简单说一下这些仓库是干嘛的:
maven-central:注意这个类型是proxy,这是一个远程仓库的代理。什么意思呢?就是说如果私服中不存在我们要下的jar包,它会从远程仓库中下载过来放在这个仓库,默认是从Maven中央仓库下载,http://repo1.maven.org/maven2/,我觉得可以配置从国内镜像下载,要不然第一次从私服下载还是会很慢。试了一下没成功,可能是我没配好,有兴趣可以试一下。
maven-public:这个仓库类型是group,表示是一个组,也就是可以是其他几个仓库的组合,为了可以对外提供一个统一的地址。默认包括maven-central,maven-releases,maven-snapshots 这三个仓库。
maven-releases:仓库类型是hosted,表示是一个宿主仓库,我们自己项目的构件就可以放在这个仓库,也可以放第三方的jar包,注意这个仓库放的是release版本的。
maven-snapshots:这个仓库也是hosted,跟上面那个一样,不同的是这个仓库放的是snapshot版本。
再说一下release 和 snapshot 的区别
release 表示的是稳定版,snapshot是一个开发中的快照版。
假如你的同伴依赖你的模块进行开发,如果你没有用snapshot,那么你每次修改完代码发布到私服中,你的同伴都需要把本地仓库的jar包先删掉再重新更新才会是最新的代码,或者你在发布到私服之前每次都要修改POM文件的版本号,显然这是不合理的。但是如果用了snapshot版的话,发布到私服中的jar包名字后面会自动带有时间戳。类似于这样:
这个时候你的同伴就能自动更新最新的snapshot版本。
有几种方式配置私服。注意Nexus3.x 跟Nexus2.x 地址是不一样的,Nexus2.x的地址参考上面阿里云的镜像。
第一,假如你只有一个项目,你可以在项目的POM文件中加入下面的配置,只对当前项目起作用。
maven-nexus
maven-nexus
http://192.168.58.130:8081/repository/maven-public/
true
true
这时候你再去下载一个你本地仓库没有的jar包,你会发现它会去私服下载。
第二,如果你有多个项目都要用到这个私服,可以在setting.xml文件中配置,对所有项目起作用,如下:
nexus
my-nexus
Nexus
http://192.168.58.130:8081/repository/maven-public/
true
true
always
nexus
第三,如果不想私服挂掉了,去访问中央仓库的话,可以这么配置,如下:
my-nuxus
my nexus
http://192.168.58.130:8081/repository/maven-public/
central
(从来没画过图,这两张图画了我半个小时)
有没有想过如果同时配了私服和阿里云镜像会怎样,我试了一下,maven首先会去私服下载jar包,如果把私服停掉,则会去阿里云镜像下载。
我们开发的模块被其他同伴依赖,所以我们要发布jar包到私服中,供其他同伴下载使用。
首先在setting.xml文件中配置帐号信息:
releases
admin
admin123
snapshots
admin
admin123
snapshots
Nexus Snapshot
http://192.168.58.130:8081/repository/maven-snapshots
releases
Nexus Release
http://192.168.58.130:8081/repository/maven-releases
更多Nexus3.x参考:http://www.cnblogs.com/kevingrace/p/6201984.html