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和远程仓库的关系?
  1. 代理远程仓库:Nexus作为Maven仓库管理器,可以代理远程仓库。这意味着Nexus可以存储和提供远程仓库的构件,供局域网内的Maven用户使用。
  2. 缓存构件:当Maven需要下载构件时,它会首先从Nexus请求。如果Nexus上不存在该构件,那么它会从外部的远程仓库下载,缓存到Nexus上之后,再为Maven的下载提供服务。这种缓存机制可以加速构件的下载速度,并减少对远程仓库的访问需求。
  3. 本地优先:Nexus的设计理念是本地优先(local-first),这意味着它更注重提供本地仓库的访问速度和可用性。当Maven请求构件时,Nexus会首先查找本地仓库中是否存在该构件,如果存在,则直接从本地仓库提供服务。只有在本地仓库不存在该构件时,才会从远程仓库下载。
  4. 可扩展性:Nexus可以与多个远程仓库建立连接,并可以配置不同的远程仓库源。这使得Nexus可以满足不同团队的需求,并可以根据实际情况扩展对更多远程仓库的支持。
  5. 安全性:Nexus可以提供对远程仓库的安全访问控制,例如使用HTTPS协议进行加密传输,验证远程仓库的身份等。这可以保护Maven用户的隐私和数据安全。
Nexus如何代理远程仓库?
  1. 配置远程仓库:在Nexus中,可以通过配置文件或界面来添加远程仓库的代理。通常需要提供远程仓库的URL、认证信息(如果有)以及其他相关参数。
  2. 同步远程仓库:当配置完成后,Nexus会通过定时任务或手动触发的方式同步远程仓库的内容。它会定期检查远程仓库的更新,并将更新的构件下载到本地仓库中。
  3. 提供本地服务:当Maven需要下载构件时,它会首先从Nexus请求。如果Nexus上不存在该构件,它会从外部的远程仓库下载,缓存到Nexus上之后,再为Maven的下载提供服务。如果Nexus上已经存在该构件,则直接提供本地服务。
  4. 缓存策略:Nexus通常会采用一些缓存策略来优化构件的存储和管理。例如,可以使用LRU(Least Recently Used)算法来管理本地缓存,将最近使用的构件存储在内存中,以提高访问速度。
  5. 安全性:Nexus可以提供对远程仓库的安全访问控制,例如使用HTTPS协议进行加密传输,验证远程仓库的身份等。这可以保护Maven用户的隐私和数据安全
安装

目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系,目前使用最多,运行最稳定的是 Nexus 2.x,下面我们以 Nexus 2.x 为例,演示 Nexus 的安装过程。

  1. 百度网盘下载 nexus-2.11.4-01-bundle.tar.gz ,官网下载不了

    http://pan.baidu.com/s/1mgznhd2

  2. 解压

[root@node3 ~]# tar -xvf nexus-2.11.4-01-bundle.tar.gz
  1. 进入解压目录

    [root@node3 ~]# cd nexus-2.11.4-01
  2. 查看配置文件

[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 sectionapplication-port=8081application-host=0.0.0.0nexus-webapp=${bundleBasedir}/nexusnexus-webapp-context-path=/nexus# Nexus sectionnexus-work=${bundleBasedir}/../sonatype-work/nexusruntime=${bundleBasedir}/nexus/WEB-INF
  1. 启动

    [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.
  2. 启动成功后打开浏览器输入: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必须要一致,否则报错