首页 > 其他分享 >Maven 私服 Nexus 3.44 搭建

Maven 私服 Nexus 3.44 搭建

时间:2025-01-13 13:33:05浏览次数:3  
标签:Nexus 私服 仓库 Maven nexus proxy hosted


文章目录

Nexus 是用来搭建 Maven 私服的,换句话说就是公司专用的 Maven 仓库,Nexus 3.x 版本的官网下载地址

个人认为下面两种场景比较适合使用私服:

1. 公司只有服务器允许访问外网,员工机器禁止访问外网,此时员工机器无法从 Maven 公服远程仓库更新依赖

2. 项目中很多需要引入的依赖是公司自己开发的,Maven 公服远程仓库中没有,所以无法下载

Nexus 有 Linux 版本和 Windows 版本,本文演示的是 Linux 版本,具体版本为 nexus-3.44.0-01-unix

1. 安装 Nexus

将下载好的 Nexus 安装包通过 FTP 工具上传到 Linux,我个人比较喜欢使用的 FTP 工具是 MobaXterm,上传后,在 Nexus 存放目录中运行 tar -zxvf nexus-3.44.0-01-unix.tar.gz 解压 Nexus 安装包,解压后目录结构如下:

解压后结构

2. Nexus 程序


Nexus 程序的存放路径为 Nexus 主程序/bin/nexus, 运行 nexus 程序时需要指定运行参数,常见的参数有三个

2.1. 启动 nexus 程序,添加运行参数 start

启动 nexus 程序,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus start,运行后界面如下:

运行 nexus

2.2. 查看 nexus 程序运行状态,添加运行参数 status

启动 nexus 后,查看是否启动成功,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus status,运行后界面如下:

查看是否启动成功

2.3. 停止 nexus 程序,添加运行参数 stop

停止 nexus 程序,以本文为例,命令为:sh nexus-3.44.0-01/bin/nexus stop,运行后界面如下:

请添加图片描述

3. 浏览器访问 Nexus GUI


查看 Nexus 状态为成功启动后,就可以通过浏览器来访问 Nexus GUI,在 GUI 中可以对 Nexus 私服进行配置,但是访问前,我们需要先将防火墙关闭,否则容易出现无法访问的情况,关闭防火墙命令:systemctl stop firewalld

3.1. 默认端口

Nexus GUI 程序的默认访问端口为 8081,以本文为例,浏览器地址为 http://192.168.3.88:8081

默认端口访问GUI

3.2. 自定义端口


想自定义 Nexus GUI 程序的端口,需要修改 Nexus 辅助程序/nexus3/etc/nexus.properties 文件,如果从未运行过 Nexus 程序,那么这个文件是不存在的,需要我们手动添加,如果运行过 Nexus 程序,那么这个文件就会被自动创建,此时直接修改文件内容即可

文件中通过 application-port=端口号 来指定端口号,以本文为例,因为我已经运行过 Nexus 程序了,所以 nexus.properties 文件就不需要手动创建了,直接通过 vim sonatype-work/nexus3/etc/nexus.properties 修改:

修改端口

修改后,重新启动 nexus 程序,然后通过自定义端口访问 Nexus GUI 程序,http://192.168.3.88:8088

nexus 自定义端口

3.3. 初次登录,并修改密码

前面访问 Nexus GUI 后,画面中没有任何内容,这是因为我们还未登录,没有权限,第一次登陆时,用户名默认为 admin,对应的密码保存在 Nexus 辅助程序/nexus3/admin.password

首次登陆

用默认的用户名和密码登陆后,会让我们自己重新设置一下密码

密码重置

4. Nexus GUI 中的仓库和仓库类型


Nexus 中的仓库类型有很多,需要我们关注的主要有三个,proxy、hosted、group

4.1. proxy - 可连公网仓库的类型

可连公网的仓库,这个类型的仓库创建时,需要设置一个公网仓库的地址,当我们本地的 Maven 访问 proxy 仓库时,如果需要的依赖不在 proxy 仓库中,则会从设置的公网仓库中下载,下载后保存到 proxy 仓库中,然后再返还给本地 Maven,流程类似下图:

proxy仓库流程

Nexus 默认提供的 proxy 仓库

Nexus 默认提供了一个名字为 maven-central 的 proxy 仓库,如下图

默认的proxy仓库

我们可以通过点击名字对该仓库的设置进行修改:

设置默认的proxy仓库

通过地址我们可以看出,这个 proxy 仓库的远端公网仓库是 maven 的官方仓库,我们也可以将这个公网仓库地址换为阿里云仓库,从而提升下载速度 https://maven.aliyun.com/repository/public


4.2. hosted - 保存上传的依赖的类型

hosted 仓库 和 proxy 仓库截然相反,proxy 仓库中的内容是从公网仓库下载下来的,而 hosted 仓库中的内容通常是我们本地 Maven 上传上来的,流程类似下图:

hosted流程

hosted 仓库,常见场景就是,公司中的某一个小组开发好一个组件后上传到 hosted 仓库,然后另一个小组想使用这个组件时,就可以在 hosted 仓库下载

hosted 仓库的内部又分两种类型,一个是发布库,一个是快照库,在创建 hosted 仓库时通过 Version policy 选项设置,这个目的就是对上传的组件进行更好的归类


Nexus 默认提供了两个 hosted 仓库

Nexus 默认提供了两个 hosted 仓库,一个是名字为 maven-releases 的发布库,一个是名字为 maven-snapshots 的快照库

hosted默认的仓库

同样点击名字就可以对 hosted 仓库进行修改,我们以 maven-releases 仓库为例:

发布库

4.3. group - 聚合仓库类型

当我们项目中的依赖既需要从 proxy 仓库下载,又需要从 hosted 仓库下载,那么就需要在本地 Maven 的 settings.xml 中设置两个远端仓库,分别指向私服中的 proxy 仓库和 hosted 仓库,这就很麻烦。而 nexus 中 group 仓库的作用,就是指定多个 nexus 中已有的仓库,将它们聚合到一起

如下图,我们可以创建一个 group 仓库,然后将 hosted 仓库和 proxy 仓库聚合到一起,这样本地 Maven 的 settings.xml 中,只需要将 group 仓库设置为远端仓库就可以了,不需要设置多次

group仓库

Nexus 默认提供了一个 group 仓库

Nexus 默认提供了一个名字为 maven-public 的 group 仓库

默认的group仓库

点击仓库名字可以查看或修改配置,从配置中可以看到,默认的 group 仓库中聚合了三个已有仓库:

group仓库配置

4.4. 创建仓库

不管创建什么类型的仓库,入口都是一样的,如下图:

创建仓库

点击后,我们可以选择要创建的仓库类型,下图红框中的就是上面说的 proxy、hosted、group:

选择仓库类型

仓库类型选择完后,是对该类型的仓库进行详细设置,此处就不举例了,可参照 Nexus 提供的默认仓库的配置

4.5. 查看仓库中的依赖

查看仓库中的依赖,入口如下图:

查看仓库

然后点击仓库名就可以查看这个仓库中已有的依赖,如果仓库是 hosted 类型,点进去后还可以上传依赖,都是傻瓜式操作,就不介绍了,进去一看就明白了

4.6. 查看私服中的仓库地址


不管是从私服的仓库下载依赖或将项目包上传到私服的仓库,首先得知道私服中仓库的地址,地址查找方式如下:

请添加图片描述


5. 从私服中的仓库下载依赖


从私服中的仓库下载依赖有两种方式:

  • 配置镜像:配置镜像后,Maven 会拦截访问远端仓库的请求,将目标地址变更为私服中仓库的地址后再请求
  • 配置仓库信息:配置仓库信息,并将仓库路径指向私服中的仓库,需要更新依赖时,直接去私服中的仓库

5.1. 方式一:配置镜像


很多文章说这种方式不会下载 hosted 库中快照库的模块,其实下载与否,取决于我们拦截的仓库的仓库信息中是否配置了允许更新快照库,如果配置允许更新快照库,那么是可以正常下载的,只不过我们通常都是对 Maven 默认的中央仓库 central 进行镜像,而在超级POM中,这个仓库的仓库信息中设置了不允许访问快照库,所以我们通过镜像就无法更新快照库的模块

以私服中默认的 group 仓库为例,在 Maven 的 settings.xml 中添加如下代码:

<!-- 设置登录权限 -->
<servers>
  <server>
    <id>ares5k-Nexus</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

<mirrors>
  <!-- mirrorOf 是要拦截的仓库,使用通配符 *,代表对所有的仓库都进行拦截,实际使用时可以根据项目情况更改 -->
  <mirror>
    <id>ares5k-Nexus</id>
    <name>my nexus</name>
    <mirrorOf>*</mirrorOf>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
  </mirror>
</mirrors>

说一下上面配置中比较重要的部分,其中 <server> 节点是设置登录密码的,<server.id> 必须与 <mirror.id> 相同,这样私服才能成功访问(如果私服没有设置访问权限,这里 <server> 部分可以省略),其他的想了解更多可以看我关于 settings.xml 的文章

5.2. 方式二:设置仓库信息

设置仓库信息,并将仓库的地址设置为私服中仓库的地址,但是使用这种方式时,一定要设置两份,一份是下载依赖时使用的,一份是下载插件时使用的

当我们的私服需要授权认证时,要先在 settings.xml 中添加登录密码:

<!-- 设置登录权限 -->
<servers>
  <server>
    <id>ares5k-Nexus</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

然后设置仓库信息,有两个地方可以设置仓库信息,一个是 pom.xml 中,一个是 settings.xml<profile> 中,在 <profile> 中设置仓库信息时,不要忘了设置 <profile> 的激活状态,否则配置不会生效

<!-- 私服仓库 - 更新依赖时使用 -->
<repositories>
  <repository>
    <id>ares5k-Nexus</id>
    <name>my nexus</name>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
    <!-- 允许在快照库下载 -->
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <!-- 允许在发布库下载 -->
    <releases>
      <enabled>true</enabled>
    </releases>
  </repository>
</repositories>

<!-- 私服仓库 - 更新插件时使用 -->
<pluginRepositories>
  <pluginRepository>
    <id>ares5k-Nexus</id>
    <name>Central Repository</name>
    <url>http://192.168.3.88:8081/repository/maven-public/</url>
    <!-- 允许在快照库下载 -->
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    <!-- 允许在发布库下载 -->
    <releases>
      <enabled>true</enabled>
    </releases>
  </pluginRepository>
</pluginRepositories>

不要忘了 <server.id><repository.id>、<pluginRepository.id> 要相同

6. 将项目打包后上传到私服中的仓库

1. 在 pom.xml 指定要上传的私服仓库,配置如下:

<!-- 工程坐标 -->
<groupId>com.ares5k</groupId>
<artifactId>ares5k-package</artifactId>
<!-- version 中有 SNAPSHOT 字眼时会上传到快照库,否则上传到发布库 -->
<version>1.0</version>

<!-- 设置上传信息 -->
<distributionManagement>
  <!-- 发布库,私服中 hosted 仓库的 Version policy 必须是 release -->
  <repository>
    <id>ares5k-release</id>
    <url>http://192.168.3.88:8081/repository/maven-releases/</url>
  </repository>
  <!-- 快照库,,私服中 hosted 仓库的 Version policy 必须是 snapshot  -->
  <snapshotRepository>
    <id>ares5k-snapshot</id>
    <url>http://192.168.3.88:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

2. 在 settings.xml 中追加私服中仓库的登录信息 <repository.id>、<snapshotRepository.id> 必须和 <server.id> 相同:

<servers>
  <!-- 发布库权限信息 -->
  <server>
    <id>ares5k-release</id>
    <username>admin</username>
    <password>root</password>
  </server>
  <!-- 快照库权限信息 -->
  <server>
    <id>ares5k-snapshot</id>
    <username>admin</username>
    <password>root</password>
  </server>
</servers>

3. 运行 mvn deploy 后就会将项目打包并上传到对应的仓库中,以上述配置为例,因为工程坐标的 <version> 中没有 SNAPSHOT 字眼,所以会将项目打包上传到 <id>ares5k-release</id> 配置的私服仓库中

其他项目组想使用我们的模块时,他们必须根据我们上传的仓库来配置他们的仓库信息(允许快照库或发布库下载)

标签:Nexus,私服,仓库,Maven,nexus,proxy,hosted
From: https://blog.csdn.net/ougaii_/article/details/145111616

相关文章

  • 在IIS Express下部署NuGet私服
    用途个人开发,部署自己的NuGetpkg.环境Win11IISExpress(轻度使用,不安装IIS,而使用VS预装的IISExpress)VS2022步骤开发环境准备因我拟用NuGet.Server,它最后的版本是基于.NETFramework4.6。传统的Web项目VS2022默认已不预装,需要手动安装项目模板。新建Asp.NETWebSite......
  • 安装Maven,配置环境变量,修改本地仓库,idea中引入依赖报错-已经解决(是我一个cainiao改bu
    安装Maven,配置环境变量,修改本地仓库后idea中引入依赖报错1.安装Maven1.1下载Maven记得去官网下载 :  https://maven.apache.org/download.cgi二进制文件,下载即安装1.2Maven安装下载完毕之后可以剪切到自己想要安装的目录,然后解压即可。(下载解压即安装)2.配置环境......
  • 创建maven多模块项目
    创建Maven父模块创建项目项目目录结构、pom.xml文件在pom.xml文件中配置打包类型为pom创建子模块common选中项目,鼠标右键,依次选择“New→Module”项目pom.xml文件,可以看到parent标签里的内容,表示父模块的信息。在pom.xml文件中配置打包类型为jar(非必须,可......
  • 2024.11.20(maven)
    Maven高级特性Maven插件配置在Maven中,插件配置是非常灵活的。你可以为插件定义各种配置参数,以满足项目的需求。org.apache.maven.pluginsmaven-compiler-plugin3.8.11.81.8<!--MavenSurefire插件配置--><plugin><groupId>org.apache.maven......
  • 2024.11.22(Maven 知识总结)
    POM(ProjectObjectModel)是Maven的核心,以xml文件形式存在。它包含了项目的基本信息,如项目坐标(groupId、artifactId、version),用于唯一标识项目。还定义了项目的依赖、插件、构建配置等内容。依赖管理Maven能自动管理项目依赖。通过在pom.xml中声明依赖,它会从中央仓库或其他指定......
  • 2024.11.13(maven)
    Maven的项目结构Maven使用约定优于配置的理念,规定了项目的目录结构。一个标准的Maven项目结构如下:代码语言:javascriptmy-maven-project|--pom.xml|--src||--main|||--java|||--resources||--test||--java||--resources|--t......
  • 2024.11.15(maven javascript)
    编写pom.xml文件在项目根目录下的pom.xml文件中,添加JUnit依赖和配置:4.0.0<groupId>com.example</groupId><artifactId>my-maven-project</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8&l......
  • 2024.11.16(maven )
    Maven多模块项目Maven支持多模块项目,通过模块化的方式组织代码和资源。多模块项目的结构类似于单模块项目,但包含了额外的父模块和子模块。创建父模块首先,创建一个父模块的Maven项目,用于管理子模块。在命令行中执行:mvnarchetype:generate-DgroupId=com.example-DartifactId......
  • 2024.11.18(maven )
    Maven生命周期和插件Maven的构建过程是由一系列的生命周期和插件来管理的。了解Maven的生命周期和插件,有助于理解项目的构建过程,以及在构建过程中可以执行哪些任务。Maven生命周期Maven生命周期是一系列阶段的集合,定义了项目的构建过程。常用的生命周期包括:clean:清理项目,......
  • Maven依赖管理项目构建工具
    一、Maven依赖管理项目构建工具目录一、Maven简介1.Maven介绍2.Maven主要作用理解3.Maven软件工作原理模型图(了解)二、Maven安装和配置1.Maven安装2.Maven环境配置3.Maven功能配置4.IDEA配置本地Maven软件三、基于IDEA创建Maven工程1.梳理Maven工程GAVP属性2.......