私服简介
私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载。
我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus。这里我们使用 Sonatype Nexus。
Nexus是常用的私用Maven服务器,一般是公司内部使用。
安装Nexus
Nexus 专业版是需要付费的,这里我们下载开源版 Nexus OSS。Nexus 提供两种安装包,一种是包含 Jetty 容器的 bundle 包,另一种是不包含容器的 war 包。下载地址:http://www.sonatype.org/nexus/go
[root@snails ~]# wget http://download.sonatype.com/nexus/3/latest-unix.tar.gz
[root@snails ~]# tar -zxvf nexus-{version}-unix.tar.gz -C /data/
[root@snails ~]# cd /data/nexus/bin
[root@snails bin]# nexus
Usage: /data/nexus/bin/nexus { console | start | stop | restart | status | dump }
[root@snails bin]# nexus start
****************************************
WARNING - NOT RECOMMENDED TO RUN AS ROOT
****************************************
Starting Nexus OSS...
Removed stale pid file: /data/nexus-{version}/bin/../bin/jsw/linux-x86-64/nexus.pid
Started Nexus OSS.
Tips:{version}是实际版本号的替代位。
本地访问验证
打开浏览器,访问:http://ip:port/nexus/
Nexus预置的仓库
Nexus 的仓库分为这么几类:
- hosted 宿主仓库:主要用于部署无法从公共仓库获取的构件(如 oracle 的 JDBC 驱动)以及自己或第三方的项目构件;
- proxy 代理仓库:代理公共的远程仓库;
- virtual 虚拟仓库:用于适配 Maven 1版本;
-
group 仓库组:Nexus 通过仓库组的概念统一管理多个仓库,这样我们在项目中直接请求仓库组即可请求到仓库组管理的多个仓库。
添加代理仓库
以 Sonatype 为例,添加一个代理仓库,用于代理 Sonatype 的公共远程仓库。点击菜单 Add - Proxy Repository :
填写Repository ID - sonatype;Repository Name - Sonatype Repository;Remote Storage Location - http://repository.sonatype.org/content/groups/public/ ,save 保存:
将添加的 Sonatype 代理仓库加入 Public Repositories 仓库组。选中 Public Repositories,在 Configuration 选项卡中,将 Sonatype Repository 从右侧 Available Repositories 移到左侧 Ordered Group Repositories,save 保存:
搜索构件
为了更好的使用 Nexus 的搜索,我们可以设置所有 proxy 仓库的 Download Remote Indexes 为 true,即允许下载远程仓库索引。
索引下载成功之后,在 Browse Index 选项卡下,可以浏览到所有已被索引的构件信息,包括坐标、格式、Maven 依赖的 xml 代码:
有了索引,我们就可以搜索了:
配置Maven使用私服
私服搭建成功,我们就可以配置 Maven 使用私服,以后下载构件、部署构件,都通过私服来管理。
在 settings.xml 文件中,为所有仓库配置一个镜像仓库,镜像仓库的地址即私服的地址(这儿我们使用私服公共仓库组 Public Repositories 的地址):
<servers>
<server>
<id>releases</id>
<username>admin</username>
<password>admin321</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin321</password>
</server>
</servers>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://{ip:port}/nexus/content/groups/public</url>
</mirror>
</mirrors>
Tips:{ip:port}是实际ip和port的替代位。settings.xml主要是用来配置私服的下载地址、上传用的帐号和密码以及activeProfile选项。
项目发布
在pom.xml文件中定义私服信息,主要是上传用到的repository,一般会包含releases和snapshots。
<!-- 公司Maven私服Nexus地址用于下载 -->
<repositories>
<repository>
<id>releases</id>
<name>Internal Releases</name>
<url>http://{ip:port}/nexus/content/repositories/releases</url>
</repository>
<repository>
<id>Snapshots</id>
<name>Internal Snapshots</name>
<url>http://{ip:port}/nexus/content/repositories/snapshots</url>
</repository>
</repositories>
<!-- 公司Maven私服Nexus地址用于发布 -->
<distributionManagement>
<repository>
<id>releases</id>
<url>http://{ip:port}/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<url>http://{ip:port}/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
发布jar时依赖于settings.xml配置账号密码。注意server的id与repository的id必须对应。如果不在项目中发布,仅发布jar文件,可登录nexus进行Artifact upload。