Maven私服Nexus3.X搭建

1.Nexus介绍

Nexus用来搭建一个自己的Maven仓库服务器也就是私服,我们正常情况下是去中央仓库去下载jar包,有了私服之后,我们是连接到私服去下载jar包,如果私服不能访问再到中央仓库去下载。搭建Nexus有什么好处呢?如果没有私服,团队中新来了一个成员,就要去中央仓库下载,因为中央仓库在国外,去中央仓库下载是很慢的,如果jar包很多的话可能要下个一天,不过这个我能想到两种解决方案,第一,直接去同事的电脑上把他的Maven仓库打包通过局域网或者移动硬盘等传输到自己的电脑上,第二,配一个国内速度比较快的镜像,比如阿里云的镜像,目前是我觉得速度最快的一个镜像了。

阿里云镜像:

<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
</mirror>
看地址就知道,其实就是阿里云基于Nexus搭建的一个Maven仓库。但是如果你们的项目是分模块开发的,而且不同的人有些模块是没有权限访问的,只能是通过jar包的形式引进来,这种情况用镜像肯定是下不下来你们公司自己的jar包的,这时候就很有必要在公司搭建一个私服。


2.Nexus3.x安装

本文介绍在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版本。


3.配置Maven私服

有几种方式配置私服。注意Nexus3.x 跟Nexus2.x 地址是不一样的,Nexus2.x的地址参考上面阿里云的镜像。

第一,假如你只有一个项目,你可以在项目的POM文件中加入下面的配置,只对当前项目起作用。

    <repositories>
        <repository>
            <id>maven-nexus</id>
            <name>maven-nexus</name>
            <url>http://192.168.58.130:8081/repository/maven-public/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
这时候你再去下载一个你本地仓库没有的jar包,你会发现它会去私服下载。

第二,如果你有多个项目都要用到这个私服,可以在setting.xml文件中配置,对所有项目起作用,如下:

    <profiles>
        <profile>
            <id>nexus</id>
            <repositories>
                <repository>
                    <id>my-nexus</id>
                    <name>Nexus</name>
                    <url>http://192.168.58.130:8081/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>always</updatePolicy>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>nexus</activeProfile>
    </activeProfiles>

这两种方式都是先去访问私服,如果私服挂掉了,会直接去访问中央仓库,如下图:



第三,如果不想私服挂掉了,去访问中央仓库的话,可以这么配置,如下:

<mirror>
      <id>my-nuxus</id>
      <name>my nexus</name>
      <url>http://192.168.58.130:8081/repository/maven-public/</url>
      <mirrorOf>central</mirrorOf>
</mirror>

通过镜像的方式来配置,有没有发现跟配置阿里云镜像的方式是一样的,现在如果私服挂掉了,是不会再去中央仓库下载的。如下图:

(从来没画过图,这两张图画了我半个小时难过


有没有想过如果同时配了私服和阿里云镜像会怎样,我试了一下,maven首先会去私服下载jar包,如果把私服停掉,则会去阿里云镜像下载。


4.发布构件到Nexus私服

我们开发的模块被其他同伴依赖,所以我们要发布jar包到私服中,供其他同伴下载使用。

首先在setting.xml文件中配置帐号信息:

   <servers> 
	  <server>  
		<id>releases</id>  
		<username>admin</username>  
		<password>admin123</password>  
	  </server>  
	  <server>  
		<id>snapshots</id>  
		<username>admin</username>  
		<password>admin123</password>  
	  </server>
  </servers>


admin,admin123是默认的帐号密码,然后在POM文件中加入如下配置:

<distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Nexus Snapshot</name>
            <url>http://192.168.58.130:8081/repository/maven-snapshots</url>
        </snapshotRepository>
        <repository>
            <id>releases</id>
            <name>Nexus Release</name>
            <url>http://192.168.58.130:8081/repository/maven-releases</url>
        </repository>
    </distributionManagement>

这里的id要对应server中的id,接下来运行maven命令,mvn deploy 就会上传到私服,打开Nexus看一眼



更多Nexus3.x参考:http://www.cnblogs.com/kevingrace/p/6201984.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值