使用Nexus搭建Maven私服
目录
1、Nexus详细介绍
Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓库中的每个Artifact。Nexus是一套“开箱即用”的系统不需要数据库,它使用文件系统加Lucene来组织数据。Nexus 使用ExtJS来开发界面,利用Restlet来提供完整的REST APIs,通过m2eclipse与Eclipse集成使用。
2、为什么要用Nexus
- 例如基金公司或者银行是不提供外网给项目组人员的,因此不能访问到Maven的远程仓库,但是希望项目Jar包可以通过Maven进行管理,此时就可以在局域网里找一台有外网权限的机器搭建Nexus私服,然后开发人员通过私服可以下载到远程仓库的Jar包。
- 如果公司有一些公共的代码需要打成jar包提供给其他的项目使用,这些jar包也想交给Maven管理,这时候我们就可以把这些公共的jar包上传到私服中,然后团队成员就可以在项目中通过Maven的方式添加改公共jar包的依赖。
3、使用Nexus搭建Maven私服流程
3.1、环境准备
操作系统 | CenOS7 |
JDK版本 | 1.8 |
Nexus安装包版本 | 2.12.0-01 |
3.2、安装包下载地址
- Nexus安装包下载:
链接:https://pan.baidu.com/s/13_bdb8k7_D9AF9vOSUEEOQ
提取码:t3hv
- JDK安装包下载:
链接:https://pan.baidu.com/s/1cn1Lh_qNKfZ0Ru81Khc_Mw
提取码:evrp
3.3、相关路径说明
/app/utils | 安装包存放路径 |
/app/nexus | Nexus安装包解压存放路径 |
3.4、上传安装包并解压
- 上传JDK和Nexus安装包至服务器的“/app/utils”中
- 使用“tar -zxvf nexus-2.12.0-01-bundle.tar.gz -C /app/nexus”和“tar -zxvf jdk-8u221-linux-x64.tar”命令解压Nexus和JDK的安装包
- 使用“cd /app/nexus”命令进入解压完成的路径中查看相关信息:
3.5、添加系统环境变量及修改Nexus相关参数
- 使用root用户,输入“vim /etc/profile”命令设置全局环境变量
- 添加好环境变量后按“esc”键,然后输入“:wq”命令保存,最后使用“source /ect/profie”命令使环境变量生效,然后输入“java -version”命令校验,出现下图所示表示配置成功:
- 添加好环境变量后,使用“cd /app/nexus/nexus-2.12.0-01/conf”命令进入nexus配置目录,然后输入“vim nexus.properties”命令修改Nexus相关参数
# Jetty section
# Nexus启动是使用Jetty完成的,Jetty相当于Tomcat,也是一个servlet容器
# Nexus的访问端口配置【按需要调整,可以直接使用默认值】
application-port=8081
# Nexus主机监听配置【不用修改】
application-host=0.0.0.0
# Nexus工程目录,相当于Tomcat中的“webapp/工程名”目录,bundleBasedir=Nexus根路径
nexus-webapp=${bundleBasedir}/nexus
# 访问路径
nexus-webapp-context-path=/nexus
# Nexus section
# Nexus仓库路径
nexus-work=${bundleBasedir}/../sonatype-work/nexus
# Nexus运行程序目录
runtime=${bundleBasedir}/nexus/WEB-INF
- 修改好后按“esc”键,然后输入“:wq”命令保存即可。
3.6、启动Nexus
- 使用“cd /app/nexus/nexus-2.12.0-01/bin/”命令进入启动脚本所在目录
- 然后使用“./nexus start”命令启动Nexus即可
- 最后使用“./nexus status”命令查看nexus的状态,如果能查到相关的进程信息则表示启动成功,如下图所示:
- 停止Nexus的命令为“./nexus stop”
3.7、验证是否搭建成功
- 本地输入“ip:port/nexus”访问,如果出现如下所示的界面则表示搭建成功:
- 我们可以点击右上角的“Log In”来登录,管理员账号为:admin,初始密码为:admin123
- 至此使用Nexus搭建Maven私服完成
4、Nexus仓库介绍
Nexus里面包含四种仓库类型,分别是group、hosted、proxy以及virtual,这四种类型的详细描述如下:
4.1、group类型
该类型的仓库包含了多个其他类型的仓库,如下图所示:
4.2、hosted类型
hosted类型工厂是服务于局域网的。当我们对项目执行mvn:deploy命令时,会把项目进行打包上传到hosted类型工厂(仓库)中。hosted仓库包含“3rd party”、“Releases”以及“Snapshots”,其中“Releases”以及“Snapshots”仓库用户保存我们自己“Releases”以及“Snapshots”版本的maven项目。而“3rd party”仓库在一般情况下,都是去maven的*仓库下载依赖包,但是maven*仓库中可能不存在某些jar包。这个时候我们就要去这些jar包的官方网站进行下载。对于这些jar包,怎么给maven进行管理呢?所以hosted类型里提供了3rd party这个仓库。当我们把这些jar包都上传到3rd party这个工厂后,在项目的pom.xml声明了jar包信息,就会自动的到这里来下载对应的依赖包啦。同时,在nexus管理界面里,我们发现,只有3rd party才有Artifact Upload(上传jar包)的选项。我们来操作一下:
4.3、proxy类型
当我们在项目的pom.xml声明了某个jar包的时候,会从本地仓库查找,如果没有,就会去局域网共享仓库(nexus)中找,再找不到的话,局域网共享仓库(nexus)就会和maven*仓库打交道,从maven*仓库中下载对应的jar包,会存放到proxy类型的Central仓库中,然后再提交到用户本地仓库中。proxy类型的仓库还包括:Apache Snapshots,其中Apache Snapshots仓库专门来存放从apache下载下来的Snapshots版本的开发包。
其中,Central类型的仓库默认配置的Maven公司的全球总仓库地址,如下图所示:
此处我们可以修改为阿里云的镜像仓库地址,这样下载的速度会快一些,修改步骤如下:
4.4、virtual类型
这种是maven1的,以后基本不会用到或者很少会用到,所以不用过多理会。
5、如何在maven中配置使用私服仓库
5.1、在pom文件中配置
<!-- 在pom文件中添加如下内容 -->
<repositories>
<repository>
<id>nexus_central</id>
<name>nexus_central_repos</name>
<url>http://192.168.40.128:8081/nexus/content/repositories/central/</url>
</repository>
<repository>
<id>nexus_releases</id>
<name>nexus_releases_repos</name>
<url>http://192.168.40.128:8081/nexus/content/repositories/releases/</url>
</repository>
<repository>
<id>nexus_snapshots</id>
<name>nexus_snapshots_repos</name>
<url>http://192.168.40.128:8081/nexus/content/repositories/snapshots/</url>
</repository>
</repositories>
<!-- 如上所示,每一个仓库都要配置一次,太麻烦了。在前面的内容中,我们有提到group类型的工厂,该类型的工厂包含了3rd party、Central、Relases、Snapshots这几个工厂,所以这里我们的配置可以简化为如下所示: -->
<repositories>
<repository>
<id>nexus</id>
<name>nexus_repos</name>
<url>http://192.168.40.128:8081/nexus/content/groups/public/</url>
</repository>
</repositories>
5.2、在setting文件中配置
- 在profiles中配置仓库信息
<!-- 在setting中的profiles标签中添加如下内容 -->
<profile>
<!--profile 的 id-->
<id>nexus</id>
<repositories>
<repository>
<!--仓库id,repositories可以配置多个仓库,保证id不重复即可-->
<id>nexus_central</id>
<!--仓库名称,便于我们阅读-->
<name>nexus_central_repos</name>
<!--仓库地址,即 nexus 仓库组的地址-->
<url>http://192.168.40.128:8081/nexus/content/repositories/central/</url>
<!--是否下载 releases 构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载 snapshots 构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>nexus_releases</id>
<name>nexus_releases_repos</name>
<url>http://192.168.40.128:8081/nexus/content/repositories/releases/</url>
<!--是否下载 releases 构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载 snapshots 构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>nexus_snapshots</id>
<name>nexus_snapshots_repos</name>
<url>http://192.168.40.128:8081/nexus/content/repositories/snapshots/</url>
<!--是否下载 releases 构件-->
<releases>
<enabled>true</enabled>
</releases>
<!--是否下载 snapshots 构件-->
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!-- 插件仓库,maven 的运行依赖插件,也需要从私服下载插件 -->
<pluginRepository>
<!-- 插件仓库的 id 不允许重复,如果重复后边配置会覆盖前边 -->
<id>public</id>
<name>Public Repositories</name>
<url>http://192.168.40.128:8081/nexus/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
- 配置仓库镜像(因此我们把私服作为*仓库的镜像,所以需要覆盖掉Maven默认的*仓库)
<!-- 在setting的mirrors标签中配置如下内容 -->
<mirror>
<!-- 当前镜像的id,用为唯一标识当前的镜像 -->
<id>nexus-mirror</id>
<!-- 说明当前镜像的主要作用,便于我们阅读 -->
<name>nexus mirror</name>
<!-- 镜像的URL地址 -->
<url>https://maven.uxunchina.cn/nexus/content/groups/public/</url>
<!-- 被镜像的远程仓库的id。因为我们现在配置的只使用私服,所以配置*号,这样的话,所有的仓库都会走我们的私服,如果只想使用其中的几个仓库,则把对应仓库的ID写进去用逗号隔开即可 -->
<mirrorOf>*</mirrorOf>
</mirror>
- 配置访问用户(如果我们的私服需要账号密码才有访问权限,那么就需要配置,如果没有就不需要配置)
<!-- 在setting的servers标签中添加如下内容 -->
<server>
<!-- 在profile中配置的仓库ID -->
<id>nexus_central</id>
<!-- 账号 -->
<username>accont</username>
<!-- 密码 -->
<password>password</password>
</server>
<server>
<id>nexus_releases</id>
<username>accont</username>
<password>password</password>
</server>
<server>
<id>nexus_snapshots</id>
<username>accont</username>
<password>password</password>
</server>
- **profile
<!-- 在settings标签最下面添加如下内容 -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>