Maven第五章: 搭建maven私服以及如何进行管理?
前言
nexus是什么?
Nexus是Sonatype公司发布的一款仓库(Repository)管理软件,常用来搭建Maven私服,所以也有人将Nexus称为“Maven仓库管理器”。 Maven私服其实并不是Maven的核心概念,它仅仅是一种衍生出来的特殊的仓库,但这并不代表它不重要,相反由于私服具有降低中央仓库负荷、节省外网带宽、以及提高项目稳定性等优点,使得私服在实际开发过程中得到了相当普遍地使用。能够帮助我们建立私服的软件被称为Maven仓库管理器,主要有以下3种:Apache Archiva、JFrog Artifactory、Sonatype Nexus。其中,Sonatype Nexus是当前最流行,使用最广泛的Maven仓库管理器。 Nexus分为开源版和专业版,其中开源版足以满足大部分Maven用户的需求。
Nexus和远程仓库的关系?
- 代理远程仓库:Nexus作为Maven仓库管理器,可以代理远程仓库。这意味着Nexus可以存储和提供远程仓库的构件,供局域网内的Maven用户使用。
- 缓存构件:当Maven需要下载构件时,它会首先从Nexus请求。如果Nexus上不存在该构件,那么它会从外部的远程仓库下载,缓存到Nexus上之后,再为Maven的下载提供服务。这种缓存机制可以加速构件的下载速度,并减少对远程仓库的访问需求。
- 本地优先:Nexus的设计理念是本地优先(local-first),这意味着它更注重提供本地仓库的访问速度和可用性。当Maven请求构件时,Nexus会首先查找本地仓库中是否存在该构件,如果存在,则直接从本地仓库提供服务。只有在本地仓库不存在该构件时,才会从远程仓库下载。
- 可扩展性:Nexus可以与多个远程仓库建立连接,并可以配置不同的远程仓库源。这使得Nexus可以满足不同团队的需求,并可以根据实际情况扩展对更多远程仓库的支持。
- 安全性:Nexus可以提供对远程仓库的安全访问控制,例如使用HTTPS协议进行加密传输,验证远程仓库的身份等。这可以保护Maven用户的隐私和数据安全。
Nexus如何代理远程仓库?
- 配置远程仓库:在Nexus中,可以通过配置文件或界面来添加远程仓库的代理。通常需要提供远程仓库的URL、认证信息(如果有)以及其他相关参数。
- 同步远程仓库:当配置完成后,Nexus会通过定时任务或手动触发的方式同步远程仓库的内容。它会定期检查远程仓库的更新,并将更新的构件下载到本地仓库中。
- 提供本地服务:当Maven需要下载构件时,它会首先从Nexus请求。如果Nexus上不存在该构件,它会从外部的远程仓库下载,缓存到Nexus上之后,再为Maven的下载提供服务。如果Nexus上已经存在该构件,则直接提供本地服务。
- 缓存策略:Nexus通常会采用一些缓存策略来优化构件的存储和管理。例如,可以使用LRU(Least Recently Used)算法来管理本地缓存,将最近使用的构件存储在内存中,以提高访问速度。
- 安全性:Nexus可以提供对远程仓库的安全访问控制,例如使用HTTPS协议进行加密传输,验证远程仓库的身份等。这可以保护Maven用户的隐私和数据安全
安装
目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系,目前使用最多,运行最稳定的是 Nexus 2.x,下面我们以 Nexus 2.x 为例,演示 Nexus 的安装过程。
-
百度网盘下载 nexus-2.11.4-01-bundle.tar.gz ,官网下载不了
http://pan.baidu.com/s/1mgznhd2
-
解压
[root@node3 ~]# tar -xvf nexus-2.11.4-01-bundle.tar.gz
-
进入解压目录
[root@node3 ~]# cd nexus-2.11.4-01
-
查看配置文件
[root@node3 conf]# cat nexus.properties
#
# Sonatype Nexus (TM) Open Source Version
# Copyright (c) 2008-2015 Sonatype, Inc.
# All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.
#
# This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,
# which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
#
# Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. "Sonatype" and "Sonatype Nexus" are trademarks
# of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the
# Eclipse Foundation. All other trademarks are the property of their respective owners.
#
# Sonatype Nexus
# ==============
# This is the most basic configuration of Nexus.
# Jetty section
application-port=8081
application-host=0.0.0.0
nexus-webapp=${bundleBasedir}/nexus
nexus-webapp-context-path=/nexus
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus
runtime=${bundleBasedir}/nexus/WEB-INF
-
启动
[root@node3 bin]# ./nexus start **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** If you insist running as root, then set the environment variable RUN_AS_USER=root before running this script.
遇到上述问题,修改 nexus脚本,去掉注解
RUN_AS_USER=root
启动成功如下
[root@node3 bin]# ./nexus start **************************************** WARNING - NOT RECOMMENDED TO RUN AS ROOT **************************************** Starting Nexus OSS... Started Nexus OSS.
-
启动成功后打开浏览器输入:http://localhost:8081/nexus 默认账号和密码:用户名:admin 密码:admin123
Nexus 仓库属性
点击左边导航栏中的 Repositories,可以看到 Nexus 自带的几个内置仓库,如下图所示。
在仓库列表中,每个仓库都具有一系列属性:
- Type:仓库的类型,Nexus 中有 4 中仓库类型:group(仓库组)、hosted(宿主仓库)、proxy(代理仓库)以及 virtual(虚拟仓库)。
- Format:仓库的格式。
- Policy:仓库的策略,表示该仓库是发布(Release)版本仓库还是快照(Snapshot)版本仓库。
- Repository Status:仓库的状态。
- Repository Path:仓库的路径。
由图 可知,Nexus 2.x 默认创建了 6 个仓库,我们称它们为 Nexus 内置仓库。
- Maven Central:该仓库用来代理 Maven 中央仓库,其策略为 Release,只会下载和缓存中央仓库中的发布版本的构件。
- Releases:策略为 Release 的宿主仓库,用来部署公司或组织内部的发布版本构件。
- Snapshots:策略为 Snapshot 的宿主仓库,用来部署公司或组织内部的快照版本构件。
- 3rd party:策略为 Release 的宿主仓库,用来部署第三方发布版本构件,这些构件一般无法从任何远程仓库中获得。
- Public Repositories:该仓库组将上述所有存储策略为 Release 的仓库聚合并通过统一的地址提供服务。
Nexus 仓库分类
Nexus 仓库按照类型(Type)区分,主要分为以下 3 个类型:
-
代理仓库(proxy):用来代理远程公共仓库,如 Maven 中央仓库、JBoss 远程仓库。
-
宿主仓库(hosted):又称 Nexus 本地仓库,该仓库通常用来部署本地项目所产生的构件。
-
仓库组(group):用来聚合代理仓库和宿主仓库,为这些仓库提供统一的服务地址,以便 Maven 可以更加方便地获得这些仓库中的构件。
为了更加直观的理解仓库组、代理仓库和宿主仓库的概念,我们通过下图展示它们的用途和区别。
由上图可知:
- Maven 可以直接从宿主仓库中下载构件。
- Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
- Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。
IntelliJ IDE使用私服配置
修改setting.xml 添加如下:
</mirrors>
<mirror>
<id>central</id>
<mirrorOf>*</mirrorOf>
<name>Central Repository</name>
<url>http://192.168.1.20:8081/nexus/content/groups/public/</url>
</mirror>
</mirrors>
修改 工程设置,一定要把user setting file 钩给勾上 . 这样工程就可以使用私服了
IntelliJ IDE上传构建到私服
直接用 idea 中的 mvn deploy 按钮就可以将 打好的 jar 包或者 war包上传到 私服中 (mvn ckean install 是将jar包安装到本地仓库)
maven setting.xml 添加如下配置:
<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
工程pom.xml 添加如下配置:
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.1.20:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.1.20:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
提示:ID必须要一致,否则报错