从零开始搭建 Maven 私有仓库并上传 Jar 包

server/2024/12/26 13:59:22/

一、为何搭建 Maven 私有仓库?

在开发过程中,搭建 Maven 私有仓库有着诸多重要的优势,以下为你详细阐述:

加速依赖下载

当我们进行项目构建时,如果依赖的是公共的 Maven 中央仓库,由于使用人数众多且服务器可能位于国外等因素,下载速度往往会受到影响,特别是在网络环境不佳或者需要频繁下载大量依赖的时候,等待时间会很长。而搭建了私有仓库后,对于已经下载过的依赖,后续项目再次使用时可以直接从本地的私有仓库获取,无需再从远程仓库重复下载,大大提升了依赖下载的速度,从而让整个项目构建过程更加高效快捷,减少因等待依赖下载而耗费的时间成本。

管理项目依赖

一方面,对于企业内部或者团队开发的一些自定义组件、工具包等,可以方便地将它们打包成 Jar 文件上传到私有仓库中进行统一管理。这样不同的项目若需要使用这些内部的依赖,就能够便捷地从私有仓库引入,保证了依赖使用的规范性和一致性,也便于版本控制。例如,团队开发了一套权限验证的工具包,将其打成 Jar 包上传到私有仓库后,各个微服务项目在需要权限验证功能时,只需在项目配置中引入对应的依赖即可。

另一方面,在应对依赖版本升级等情况时,私有仓库能更好地进行协调管理。在公共的仓库中,依赖更新可能不会及时同步给所有项目开发者,而在私有仓库里,团队可以根据自身的节奏和需求来决定何时对依赖进行升级,并及时通知到相关的项目成员去更新使用,避免因依赖版本不一致而导致的兼容性问题和潜在的项目风险,让项目依赖管理变得更加有序、可控。

总之,搭建 Maven 私有仓库无论是从提升开发效率,还是加强项目依赖的管理等方面来看,都有着显著的积极作用,能为开发工作带来极大的便利。

二、搭建前的准备工作

在着手搭建 Maven 私有仓库之前,确保系统中已经安装配置好 JDK,建议使用 JDK 8 或更高版本。同时,需要从官方网站下载 Nexus 安装包,Nexus 是一款常用的 Maven 仓库管理器,它能够帮助我们高效地搭建和管理私有仓库。根据操作系统的类型(如 Windows、Linux 等),选择对应的 Nexus 安装包进行下载。

三、安装与启动 Nexus

(一)安装步骤

  • Windows 系统
    • 下载 Nexus 安装包(通常为 zip 格式),解压到指定目录,例如 C:\nexus。
    • 进入解压后的 bin 目录,以管理员身份运行命令提示符,执行 nexus.exe /install 安装服务,然后执行 nexus.exe /start 启动服务。
  • Linux 系统
    • 下载 Nexus 安装包(如 tar.gz 格式),将其上传至服务器。
    • 在安装包所在目录执行解压命令,如 tar -zxvf nexus-<version>.tar.gz。解压后会得到 nexus-<version> 目录,进入该目录。
    • 编辑 bin/nexus.rc 文件,设置运行 Nexus 的用户,例如 RUN_AS_USER=root(若不设置,可能因权限问题导致启动失败)。
    • 进入 bin 目录,执行 ./nexus start 启动服务。

(二)启动 Nexus 服务

启动 Nexus 服务后,默认会监听在本地的 8081 端口。在浏览器中输入 http://localhost:8081(Windows 系统)或 http://服务器 IP 地址:8081(Linux 系统),即可访问 Nexus 的管理界面。首次访问时,默认的用户名是 admin,密码可在 sonatype-work/nexus3/admin.password 文件中找到。登录后,建议修改默认密码以确保安全。

四、登录并配置 Nexus 仓库

(一)登录 Nexus

在浏览器中输入 http://localhost:8081(Windows 系统)或 http://服务器 IP 地址:8081(Linux 系统),进入 Nexus 的登录页面。首次登录时,使用默认用户名 admin,密码可在 sonatype-work/nexus3/admin.password 文件中找到。登录成功后,建议立即修改密码,以保障仓库的安全性。修改密码的步骤如下:先关闭 Nexus 服务,然后进入 Nexus 安装目录执行

java -jar./lib/support/nexus-orient-console.jar

接着进入数据库执行

connect plocal:../sonatype-work/nexus3/db/security admin admin

再重置密码

admin/admin123 update user SET password="$shiro1$SHA-512$1024$NE+wqQq/TmjZMvfI7ENh/g==$V4yPw8T64UQ6GfJfxYq2hLsVrBY8D1v+bktfOxGdt4b/9BthpWPNUy/CBk6V9iA0nHpzYzJFWO8v/tZFtES8CA==" UPSERT WHERE id="admin"

最后关闭修改数据库的命令提示符(否则 Nexus 服务无法启动),并重启 Nexus 服务。

(二)仓库配置

Nexus 中有多种仓库类型,其中常用的有 maven-central、maven-public、maven-releases 和 maven-snapshots。

  • maven-central 类型:是代理仓库(Proxy Repository),用于代理 Maven Central 仓库,这是一个全球性的公共仓库,包含了大量的开源库和框架。其特点包括远程索引,Nexus 会定期从 Maven Central 仓库同步元数据和索引,以便快速查找和下载依赖;缓存功能可减少对外部网络的依赖,提高构建速度;并且该仓库是只读的,不能向其上传包,只能从中下载。
  • maven-public 类型:属于组仓库(Group Repository),主要用于聚合多个实际的 Maven 仓库,提供一个统一的访问点。它通常会包含 maven-central、maven-releases 和 maven-snapshots 等仓库,形成一个虚拟的仓库组。开发人员和构建工具只需配置一个 maven-public 仓库的 URL,即可访问所有的 Maven 包,还可根据需要灵活添加或移除组中的仓库。
  • maven-releases 类型:是宿主仓库(Hosted Repository),用于存储正式发布的版本(release)包。这些包都是经过测试和验证的稳定版本,一旦发布,包的内容不能更改。开发人员和持续集成系统可以将发布版本的包部署到 maven-releases 仓库。
  • maven-snapshots 类型:同样是宿主仓库,用于存储开发中的快照(snapshot)版本包。快照版本存储的是开发过程中的中间版本,可能包含未完成的功能或修复,其包内容可以随时更新。Maven 会自动检查并下载最新的快照版本,确保开发环境始终使用最新的代码,开发人员和持续集成系统也可将快照版本的包部署到 maven-snapshots 仓库。

在配置仓库时,需要设置仓库的访问权限和地址。例如,对于 maven-releases 仓库,可以设置只有特定的用户或用户组具有上传和下载权限;对于 maven-snapshots 仓库,可以设置允许开发人员在开发过程中频繁更新快照版本的权限等。仓库地址则根据实际情况确定,如 http://服务器 IP 地址:8081/repository/maven-releases/ 等,以便在项目中能够准确地引用这些仓库。

五、Maven 与私有仓库的连接配置

(一)修改 settings.xml 文件

在 Maven 的 settings.xml 文件中设置私服地址及认证信息。找到 <servers> 标签,在其中添加如下配置:

<server><id>nexus-releases</id><username>your_username</username><password>your_password</password>
</server>
<server><id>nexus-snapshots</id><username>your_username</username><password>your_password</password>
</server>

这里的 id 要与项目 pom.xml 中配置的仓库 id 相对应,username 和 password 则是登录 Nexus 仓库的账号和密码。

同时,在 <mirrors> 标签中配置仓库地址,例如:

<mirror><id>nexus</id><mirrorOf>*</mirrorOf><name>Nexus Repository</name><url>http://服务器 IP 地址:8081/repository/maven-public/</url>
</mirror>

上述配置表示将所有的仓库请求都指向我们搭建的 Nexus 私有仓库中的 maven-public 组仓库。

在 <profiles> 标签中配置多仓库使用:

<profile><id>nexus</id><repositories><repository><id>nexus-releases</id><name>Nexus Release Repository</name><url>http://服务器 IP 地址:8081/repository/maven-releases/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository><repository><id>nexus-snapshots</id><name>Nexus Snapshot Repository</name><url>http://服务器 IP 地址:8081/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>nexus-releases</id><name>Nexus Release Repository</name><url>http://服务器 IP 地址:8081/repository/maven-releases/</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository><pluginRepository><id>nexus-snapshots</id><name>Nexus Snapshot Repository</name><url>http://服务器 IP 地址:8081/repository/maven-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories>
</profile>

最后,在 <activeProfiles> 标签中激活仓库:

<activeProfile>nexus</activeProfile>

(二)项目 pom.xml 配置

在项目的 pom.xml 文件中指定仓库地址,以便项目能与私有仓库交互。在 <distributionManagement> 标签中添加如下配置:

<distributionManagement><repository><id>nexus-releases</id><name>Nexus Release Repository</name><url>http://服务器 IP 地址:8081/repository/maven-releases/</url></repository><snapshotRepository><id>nexus-snapshots</id><name>Nexus Snapshot Repository</name><url>http://服务器 IP 地址:8081/repository/maven-snapshots/</url></snapshotRepository>
</distributionManagement>

这里的 id 要与 settings.xml 中配置的服务器 id 一致。

此外,在 <repositories> 标签中添加仓库引用:

<repositories><repository><id>nexus</id><name>Nexus Repository</name><url>http://服务器 IP 地址:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>

在 <pluginRepositories> 标签中添加插件仓库引用:

<pluginRepositories><pluginRepository><id>nexus</id><name>Nexus Repository</name><url>http://服务器 IP 地址:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository>
</pluginRepositories>

六、上传 Jar 包到私有仓库

(一)打包项目

在项目的根目录下,使用 mvn clean package 命令进行项目打包。Maven 会依据项目的配置信息(pom.xml 文件),将项目的源代码、资源文件以及依赖的库文件等进行编译、测试,并最终打包成一个 Jar 文件。打包成功后,在项目的 target 目录下会生成对应的 Jar 包。例如,若项目名为 my-project,则会生成 my-project-1.0-SNAPSHOT.jar(对于快照版本)或 my-project-1.0.jar(对于正式发布版本)等文件,具体的文件名取决于项目的版本号和配置。

(二)上传命令

使用 mvn deploy:deploy-file 命令上传 Jar 包到私有仓库,命令参数如下:

  • DgroupId:Jar 包的 groupId,通常为公司或组织的域名倒序 + 项目名称,例如 com.example.myproject。
  • DartifactId:Jar 包的 artifactId,即项目的名称或模块名称,比如 myproject-utils。
  • Dversion:Jar 包的版本号,如 1.0-SNAPSHOT(快照版本)或 1.0(正式版本)。
  • Dpackaging:上传文件的类型,这里为 jar
  • Dfile:要上传的 Jar 包的绝对路径,例如 /path/to/myproject-utils-1.0-SNAPSHOT.jar
  • DpomFile:Jar 包对应的 pom 文件的绝对路径,如果没有则可能会导致依赖传递问题,例如 /path/to/myproject-utils-1.0-SNAPSHOT.pom。
  • Durl:私有仓库的地址,即 Nexus 中对应仓库的 URL,例如 http://服务器 IP 地址:8081/repository/maven-releases/ 或 http://服务器 IP 地址:8081/repository/maven-snapshots/。
  • DrepositoryId:对应 settings.xml 中配置的服务器 id,用于关联私服的用户名和密码,如 nexus-releases 或 nexus-snapshots。

对于正式版的 Jar 包,上传命令示例:

mvn deploy:deploy-file -DgroupId=com.example.myproject -DartifactId=myproject-utils -Dversion=1.0 -Dpackaging=jar -Dfile=/path/to/myproject-utils-1.0.jar -DpomFile=/path/to/myproject-utils-1.0.pom -Durl=http://服务器 IP 地址:8081/repository/maven-releases/ -DrepositoryId=nexus-releases

对于快照版的 Jar 包,上传命令示例:

mvn deploy:deploy-file -DgroupId=com.example.myproject -DartifactId=myproject-utils -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=/path/to/myproject-utils-1.0-SNAPSHOT.jar -DpomFile=/path/to/myproject-utils-1.0-SNAPSHOT.pom -Durl=http://服务器 IP 地址:8081/repository/maven-snapshots/ -DrepositoryId=nexus-snapshots

执行命令后,Maven 会将 Jar 包上传到指定的私有仓库中,其他项目就可以通过在 pom.xml 文件中配置依赖来使用该 Jar 包了。

七、在其他项目中引用私有仓库的 Jar 包

在其他项目中,若要引用私有仓库中的 Jar 包,只需在项目的 pom.xml 文件中添加相应的依赖配置即可。例如:

<dependency><groupId>com.example.myproject</groupId><artifactId>myproject-utils</artifactId><version>1.0</version>
</dependency>

Maven 会根据配置信息,从私有仓库中下载对应的 Jar 包及其依赖项,然后将其添加到项目的类路径中,使得项目能够顺利使用该 Jar 包提供的功能。


http://www.ppmy.cn/server/153334.html

相关文章

Es搭建——单节点——Linux

Es搭建——单节点——Linux 一、安装 下载安装包&#xff1a; 官网下载地址&#xff1a;https://www.elastic.co/downloads/elasticsearch 上传包到linux 切换到安装目录下 解压&#xff1a;tar -zxvf elasticsearch-7.17.1-linux-x86_64.tar.gz 重命名安装文件夹 mv elastics…

C# 异步编程与多线程简析

引言 在现代软件开发中,异步编程和多线程是实现高性能、高响应性应用程序的关键技术。C# 提供了多种机制来支持异步编程和多线程,其中Thread、ThreadPool 和Task 是最为常用的三种。本文将对这三种机制进行简要分析,探讨它们的使用场景、优缺点以及如何在实际开发中选择合适…

Unity Mirror插件WebGL端多人联机实现

Demo地址[这里是图片001]https://gitee.com/njiyue/unity-mirror-webgl-test 使用Mirror插件及其开源的SimpleWebTransport实现&#xff0c;简单记录下遇到的问题。详细原理就不多介绍了哈~ Unity版本&#xff1a;2022.3.48f1c1 1. Unity导入mirror插件、SimpleWebTransport包…

InnoDB存储引擎【MySQL从放弃到入门】

文章目录 InnoDB存储引擎【MySQL从放弃到入门】1.逻辑架构1.1 一条SQL语句是怎么执行的呢&#xff1f;1.2 MySQL存储引擎有哪些&#xff1f; 2.MySQL一行记录是怎么存储的&#xff1f;2.1 NULL值是如何存储的&#xff1f; 3.char和varchar的区别&#xff1f;4.数据页4.1 聚簇索…

《Vue进阶教程》(12)ref的实现详细教程

1 为什么需要ref 由于proxy只能代理引用类型数据(如: 对象, 数组, Set, Map...), 需要一种方式代理普通类型数据(String, Number, Boolean...) 设计ref主要是为了处理普通类型数据, 使普通类型数据也具有响应式 除此之外, 通过reactive代理的对象可能会出现响应丢失的情况. …

阿里巴巴2017实习生笔试题(二)

阿里巴巴2017实习生笔试题&#xff08;二&#xff09; 2024/12/25 1.下面哪一个不是动态链接库的优点&#xff1f; B A.共享 B.装载速度快 C.开发模式好 D.减少页面交换 解析 1 静态链接库的优点 (1) 代码装载速度快&#xff0c;执行速度略比动态链接库快&#xff1b;…

网站服务器被攻击了怎么办?

当网站服务器被攻击时&#xff0c;可能会出现各种问题&#xff0c;如服务中断、数据泄露、恶意软件感染等。如果不及时采取措施&#xff0c;可能会给企业带来严重的损失。因此&#xff0c;当网站服务器被攻击时&#xff0c;企业需要采取以下措施来应对&#xff1a; 一、快速定…

MYSQL 架构

MySQL 架构设计灵活&#xff0c;采用模块化的分层架构&#xff0c;分为三大层次&#xff1a;连接层、服务层 和 存储引擎层。这种设计让 MySQL 能够适应不同的使用场景并支持多种存储引擎&#xff0c;以下是对其架构的详细解析&#xff1a; 1. 连接层&#xff08;Connection La…