【Maven】008-Maven 私服搭建与使用一、概述1、简介Maven私服(Repository Manager)是一个用于管理和分发构建制品(如JAR、WAR、POM文件等)的服务器。它允许团队在本地搭建一个中央存储库,用于保存和分享项目构建所需的依赖项。一些常见的Maven私服产品包括 Nexus、Artifactory 和 Apache Archiva 。
2、建立私服后依赖查找和下载逻辑第一步:请求本地仓库当用户需要某个构件时,首先会检查本地仓库是否已经存在所需构件。如果本地仓库中已经有所需构件,系统将直接从本地仓库获取,无需进行远程请求。第二步:请求 Maven 私服如果本地仓库中不存在所需构件,用户的请求将转向 Maven 私服。Maven 私服会检查自身的仓库,如果存在所需构件,将其下载到本地仓库,并返回给用户。第三步:请求外部远程仓库(远程中央仓库等)如果 Maven 私服也没有所需构件,系统将尝试从外部的远程仓库(通常是中央仓库)中获取。如果外部远程仓库存在所需构件,Maven 私服会将该构件下载并缓存到自身的仓库中,然后将构件返回给用户。如果外部远程仓库中也不存在所需构件,Maven 将报错,指示找不到所需的依赖项。参考图image-202310211646317913、Maven 私服的优势加速构建过程: Maven 私服允许团队在本地搭建一个中央存储库,使得构建时可以优先从局域网内的私服获取依赖项,从而减少对外部远程仓库的依赖,加速构建过程。降低对外部网络的依赖性: 私服允许团队在没有互联网连接或网络较差的情况下进行构建。依赖项的本地缓存和私服的存在减少了对外部网络的依赖性,提高了项目的可靠性。统一依赖管理: 通过私服,团队可以统一管理和控制项目所需的依赖项版本,确保整个团队使用相同的构建制品,降低了版本冲突和不一致性的可能性。安全性: 私服可以提供访问控制和安全认证机制,限制对仓库的访问,确保只有授权的人员能够发布和获取构建制品。这有助于保护项目的代码和依赖项的安全性。本地镜像和缓存: 私服可以缓存外部远程仓库中的构建制品,降低了从外部仓库获取依赖项的延迟。此外,私服还可以配置为本地镜像,提供更快速的下载。离线部署: Maven 私服支持离线部署,使得在没有互联网连接的环境中也能够构建和部署项目,适用于一些安全要求较高或隔离网络的场景。4、Maven 私服常用的产品Nexus(当前最流行、使用最广泛): Nexus 是 Sonatype 公司推出的一款流行的 Maven 私服产品。提供强大的仓库管理和安全性功能。支持多种仓库格式,包括Maven、npm、Docker等。Artifactory: Artifactory是JFrog公司开发的另一款领先的构建制品仓库管理工具。支持各种包括 Maven、Gradle、npm 等的构建工具。具有高度可伸缩性和灵活的部署选项。Apache Archiva: Apache Archiva 是由 Apache 软件基金会提供的开源 Maven 私服工具。提供基本的仓库管理功能,适用于小型项目或对简单配置有需求的团队。二、Nexus 下载、安装、初始设置1、下载地址https://help.sonatype.com/repomanager3/product-information/download
目标image-202401140918000812、安装第一步:解压到一个目录image-20240114093016614第二步:启动 使用管理员身份打开 CMD ,切换到 bin 目录。
命令:
安装:nexus.exe /install bm-maven启动:nexus.exe /start bm-maven停止:nexus.exe /stop bm-maven卸载:nexus.exe /uninstall bm-mavenimage-20240114094115157第三步:访问 http://localhost:8081/image-202401140944439713、初始设置登录 用户名:admin
密码:(在 Nexus\sonatype-work\nexus3\admin.password )
image-20240114094610809根据提示设置新密码image-20240114094842314禁用匿名登录image-20240114094937996初始化完成后image-20240114095117223三、Nexus 上的仓库1、仓库image-202401140953592482、仓库类型&说明仓库类型
说明
proxy
某个远程仓库的代理
group
存放:通过 Nexus 获取的第三方 jar 包
hosted
存放:本团队其他开发人员部署到 Nexus 的 jar 包
3、仓库名称&说明仓库名称
说明
maven-central
Nexus 对 Maven 中央仓库的代理
maven-public
Nexus 默认创建,供开发人员下载使用的组仓库
maven-releases
Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 releases 版本
maven-snapshots
Nexus 默认创建,供开发人员部署自己 jar 包的宿主仓库 要求 snapshots 版本
4、初始状态仓库内为空image-20240114095559491四、通过 Nexus 下载 jar 包1、将中央仓库地址设置为阿里云镜像地址 为了加快国内下载速度!
第一步:选择要修改的仓库image-20240114095957773第二步:修改地址为阿里云镜像地址 http://maven.aliyun.com/nexus/content/groups/public/
image-20240114100154731第三步:保存配置image-202401141002484432、将本机 Maven 配置的阿里云镜像地址改成自己的私服地址第一步:拷贝自己的私服仓库地址image-20240114100726978第二步:修改本机 Maven 配置的阿里云镜像地址image-20240114101058232第三步:添加访问用户名密码 我们设置了禁止匿名访问!
这里需要格外注意:server 标签内的 id 标签值必须和 mirror 标签中的 id 值一样。
image-202401141322477293、通过 Nexus 下载 jar 包第一步:修改本机 Maven 仓库地址 因为原本的仓库里面可能已经有很多内容了,为了直观,新建一个本地空仓库(一个空文件夹),让 Maven 直接向私服获取依赖!
image-20240114101533142第二步:在 Maven 工程下执行 Maven 命令代码语言:javascript复制mvn clean compile部分下载过程日志:
代码语言:javascript复制......
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/org/codehaus/plexus/plexus-container-default/1.5.5/plexus-container-default-1.5.5.jar (217 kB at 42 kB/s)
Downloading from zibo-nexus-maven: http://localhost:8081/repository/maven-central/junit/junit/3.8.2/junit-3.8.2.jar
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/log4j/log4j/1.2.12/log4j-1.2.12.jar (358 kB at 63 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/commons-logging/commons-logging-api/1.1/commons-logging-api-1.1.jar (45 kB at 7.9 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/org/apache/xbean/xbean-reflect/3.4/xbean-reflect-3.4.jar (134 kB at 23 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/junit/junit/3.8.2/junit-3.8.2.jar (121 kB at 21 kB/s)
Downloaded from zibo-nexus-maven: http://localhost:8081/repository/maven-central/com/google/collections/google-collections/1.0/google-collections-1.0.jar (640 kB at 89 kB/s)
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\MyFile\IDEAProjects\mvn-demo\demo1\target\classes
[INFO]
[INFO] ---------------------------< com.zibo:demo2 >---------------------------
[INFO] Building demo2 1.0-SNAPSHOT [3/3]
[INFO] from demo2\pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ demo2 ---
[INFO] Deleting D:\MyFile\IDEAProjects\mvn-demo\demo2\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ demo2 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ demo2 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\MyFile\IDEAProjects\mvn-demo\demo2\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for mvn-demo 1.0-SNAPSHOT:
[INFO]
[INFO] mvn-demo ........................................... SUCCESS [ 8.613 s]
[INFO] demo1 .............................................. SUCCESS [01:22 min]
[INFO] demo2 .............................................. SUCCESS [ 0.079 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:31 min
[INFO] Finished at: 2024-01-14T13:26:44+08:00
[INFO] ------------------------------------------------------------------------第三步:查看私服仓库image-20240114132842488五、将 jar 包部署到 Nexus 如出现问题,请调整下面配置。
1、Maven 工程中配置 注意:这里 repository 和 snapshotRepository 的 id 标签必须和 settings.xml 中指定的 mirror 标签的 id 属性一致。
代码语言:javascript复制
2、执行部署命令 mvn deploy
执行日志image-20240114134727474私服image-20240114134906341六、引用别人部署的 jar 包1、Maven 工程中配置代码语言:javascript复制
2、打包日志image-20240114140455255