Maven第五章: 搭建maven私服以及如何进行管理?

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 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

  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

Maven第五章: 搭建maven私服以及如何进行管理?_第1张图片

Nexus 仓库属性

点击左边导航栏中的 Repositories,可以看到 Nexus 自带的几个内置仓库,如下图所示。

Maven第五章: 搭建maven私服以及如何进行管理?_第2张图片

在仓库列表中,每个仓库都具有一系列属性:

  • 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私服以及如何进行管理?_第3张图片

由上图可知:

  • Maven 可以直接从宿主仓库中下载构件。
  • Maven 也可以从代理仓库中下载构件,代理仓库会从远程仓库下载并缓存构件。
  • Maven 还可以从仓库组中下载构件,仓库组会从其包含的宿主仓库和代理仓库中获取构件。
IntelliJ IDE使用私服配置

修改setting.xml 添加如下:

mirrors>
  <mirror>
     <id>centralid>
     <mirrorOf>*mirrorOf>
     <name>Central Repositoryname>
     <url>http://192.168.1.20:8081/nexus/content/groups/public/url>
   mirror>
 mirrors>

修改 工程设置,一定要把user setting file 钩给勾上 . 这样工程就可以使用私服了

Maven第五章: 搭建maven私服以及如何进行管理?_第4张图片

IntelliJ IDE上传构建到私服

直接用 idea 中的 mvn deploy 按钮就可以将 打好的 jar 包或者 war包上传到 私服中 (mvn ckean install 是将jar包安装到本地仓库)

maven setting.xml 添加如下配置:

 <servers>  
   <server>
     <id>nexus-releasesid>
     <username>adminusername>
     <password>admin123password>
   server>
   <server>
     <id>nexus-snapshotsid>
     <username>adminusername>
     <password>admin123password>
   server>
 servers>

工程pom.xml 添加如下配置:

<distributionManagement>
    <repository>
      <id>nexus-releasesid>
      <name>Nexus Release Repositoryname>
      <url>http://192.168.1.20:8081/nexus/content/repositories/releases/url>
    repository>
    <snapshotRepository>
      <id>nexus-snapshotsid>
      <name>Nexus Snapshot Repositoryname>
      <url>http://192.168.1.20:8081/nexus/content/repositories/snapshots/url>
    snapshotRepository>
  distributionManagement>

提示:ID必须要一致,否则报错
Maven第五章: 搭建maven私服以及如何进行管理?_第5张图片

你可能感兴趣的:(maven,系列专栏,maven,java,maven,知识全面教程)