实战详解Maven部署(deploy)jar到私有仓库Nexus及如何引入私仓jar包

1 缘起

本来只打算测试jar包部署(deploy)到私仓,
可是,发现部署后与预期有些不一样,就又查了些资料,
实际验证了一下对应的功能,
比如,部署jar包区分快照版和发行版,
部署时需要使用不同的版本标识,快照版后缀:-SNAPSHOT,发行版后缀:-RELEASE或者纯版本号,
顺便学习了一下各个仓库的概念,见后文,
分享部署jar包到私仓以及如何引入私仓的jar包,
帮助开发者完善相关的私仓知识。

Ubuntu部署Nexus:https://blog.csdn.net/Xin_101/article/details/125906120

2 配置

使用Maven部署jar包到私仓,需要在项目中配置私仓地址,
并且,在本地的Maven中添加私仓的用户名和密码,
这里,需要注意:Maven配置文件的id和项目私仓地址的id保持一致
部署jar包,区分快照地址和发行版地址,
引用jar包时使用私仓的公共仓库。

2.1 获取仓库地址

序号仓库地址
1快照仓库http://192.168.211.129:18081/repository/maven-snapshots/
2发行仓库http://192.168.211.129:18081/repository/maven-releases/

获取仓库日志操作如下图所示:

  • 快照版仓库:snapshots
    在这里插入图片描述

  • 发行版仓库:releases
    在这里插入图片描述

2.2 配置项目中的pom.xml

添加属性:distributionManagement,即私仓(Nexus)地址
用于向私有仓库Nexus推送jar包,
其中,

  • snapshotRepository:jar包快照版仓库,用于存储快照jar包
    • id:自定义的id
    • url:用于存储快照版jar包的私仓地址,如上
  • repository:jar包发行版仓库
    • id:自定义的id
    • url:用于存储发行版jar包的私仓地址,如上
      这里的id均为自定义的id,需要注意的是:
      Maven的配置文件settings.xml中,
      配置的servers属性id应与这里的id完全一致。
<distributionManagement>
		<snapshotRepository>
			<id>my-snapshots</id>
			<name>My snapshots</name>
			<url>http://192.168.211.129:18081/repository/maven-snapshots/</url>
		</snapshotRepository>
		<repository>
			<id>my-releases</id>
			<name>My releases</name>
			<url>http://192.168.211.129:18081/repository/maven-releases/</url>
		</repository>
	</distributionManagement>

上面介绍了快照版和发行版的仓库,
因此,使用deploy时,也会按照不同的版本将jar包部署到对应的仓库,

  • 部署到快照版仓库:0.0.1-SNAPSHOT
    快照版的版本后缀要添加-SNAPSHOT以区分是快照版,deploy时会将jar包发送到快照版仓库。
  • 部署到发行版仓库:0.0.1-RELEASE
    发行版的版本后缀添加-RELEASE,或者直接是数字,deploy时会自动部署到发行版仓库。

SNAPSHOT完整样例如下,版本为:0.0.1-SNAPSHOT,
如果是发行版,版本修改为:0.0.1-RELEASE,以示区分。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.monkey</groupId>
	<artifactId>template-spring-boot-starter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>template-spring-boot-starter</name>
	<description>Template project for Spring Boot Starter</description>
	<properties>
		<java.version>1.8</java.version>
		<autoconfigure.version>2.4.5</autoconfigure.version>
		<configuration.processor.version>2.4.5</configuration.processor.version>
	</properties>
	<dependencies>
		<!-- Compile dependencies -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-autoconfigure</artifactId>
			<version>${autoconfigure.version}</version>
		</dependency>

		<!-- @ConfigurationProperties annotation processing (metadata for IDEs) -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<version>${configuration.processor.version}</version>
			<optional>true</optional>
		</dependency>
	</dependencies>

	<distributionManagement>
		<snapshotRepository>
			<id>my-snapshots</id>
			<name>My snapshots</name>
			<url>http://192.168.211.129:18081/repository/maven-snapshots/</url>
		</snapshotRepository>
		<repository>
			<id>my-releases</id>
			<name>My releases</name>
			<url>http://192.168.211.129:18081/repository/maven-releases/</url>
		</repository>
	</distributionManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

2.3 配置Maven

在配置文件:maven目录/conf/settings.xml添加servers属性,
servers属性中这里可以配置多个私仓id,但需与上传项目pom.xml中配置的id一致,
用户名和密码即私仓Nexus的用户名和密码。

<servers>
    <server>
      <id>my-snapshots</id>
      <username>admin</username>
      <password>123456</password>
    </server>
     <server>
      <id>my-releases</id>
      <username>admin</username>
      <password>123456</password>
    </server>
  </servers>

3 部署

这里使用SpringBoot的starter项目作为测试。

3.1 部署到快照版仓库

将jar包部署到快照仓库,
pom.xml中的版本配置为0.0.1-SNAPSHOT,
标识为快照。
在这里插入图片描述

3.2 部署到发行版仓库

将jar包部署到发行版仓库,
pom.xml中的版本配置为0.0.1-RELEASE,
标识为发行版,也可以只用版本号,如0.0.1。
在这里插入图片描述

  • 成功标识:
    在这里插入图片描述

4 查看仓库

完成Nexus Repository私有仓库部署,登录私仓后,可以看到多个仓库,
仓库分类如下表所示,

序号仓库描述
1maven-central中央仓库,默认从https://repo1.maven.org/maven2/拉取软件包,可配置
2maven-public公共仓库,存储发行版和快照版的软件包,即发行版和快照版的软件包都会在public中
3maven-releases发行版仓库,软件包稳定后,发布到该仓库,团队内使用
4maven-snapshots快照版本仓库,用于测试软件,发布到线上

4.1 快照版仓库

发布测试jar包到快照版,用于测试功能,即开发环境,
配置的快照版仓库提交策略为可覆盖,即同版本可重复提交,
使用时间戳区分不同的提交,后文:发行版和快照版有什么不同讲解。

  • 进入快照版仓库
    在这里插入图片描述

  • 快照版jar包
    在这里插入图片描述

  • 如何删除?

在这里插入图片描述

4.2 发行版仓库

发行版仓库即生产环境,已完成测试的jar包,部署到发行版仓库,
供公司内部使用,部署时可以在版本号后添加后缀:-RELEASE作为标识,
当然也可以直接使用版本号,发行版仓库的jar并如下图所示。
在这里插入图片描述

4.3 公共仓库

公共版仓库中同时保存快照版和发行版jar包,
这个仓库用于开发者从私仓中拉取需要的jar包,后文讲解如何在项目中集成私仓,拉取jar包。
在这里插入图片描述

5 发行版和快照版有什么不同?

快照版使用时间戳作为版本后缀,
为什么呢?
因为快照版的提交策略为Allow redploy,允许相同版本号多次上传,
为了区分不同的版本,使用时间戳作为后缀。

在这里插入图片描述
快照版同一个版本的多次提交:
在这里插入图片描述

6 引入私仓jar包

引入私仓jar包,需要在项目中配置私仓的公共仓库地址,
以及对应包的Maven坐标。

6.1 获取jar包Maven坐标

首先从私仓的公共仓库maven-public中获取对用jar包的Maven坐标,
获取方式如下图所示。
在这里插入图片描述

6.2 项目配置私仓地址

在项目中添加私有仓库的地址,
通过repositories属性,与dependencies属性同级。
再引入对应的jar包Maven坐标,
配置样例如下:

<repositories>
		<repository>
			<id>my-public</id>
			<url>http://192.168.211.129:18081/repository/maven-public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
			</snapshots>
		</repository>
	</repositories>
	<dependencies>
		<dependency>
			<groupId>com.monkey</groupId>
			<artifactId>template-spring-boot-starter</artifactId>
			<version>0.0.1-RELEASE</version>
		</dependency>
	</dependencies>

更新maven,依赖中出现对应的包:com.monkey:template-spring-boot-starter:0.0.1-RELEASE,
如下图所示。
在这里插入图片描述

7 Q&A

部署jar包无授权:401

status: 401 Unauthorized
在这里插入图片描述

  • 原因
    没有在Maven配置文件中(conf/settings.xml)中配置私仓的用户名和密码。
  • 方案
    在Maven配置文件中(conf/settings.xml)中配置私仓的用户名和密码,
    其中,Maven配置文件的id与项目pom.xml的distributionManagement属性对应仓库的id一致。
<servers>
    <server>
      <id>my-snapshots</id>
      <username>admin</username>
      <password>123456</password>
    </server>
     <server>
      <id>my-releases</id>
      <username>admin</username>
      <password>123456</password>
    </server>
  </servers>

8 小结

核心:
(1)发布jar包有两种仓库选择:快照版和发行版;
(2)快照版多为测试阶段的版本,上传时添加-SNAPSHOT标识,自动将包上传到快照版仓库;
(3)发行版正式功能的版本,完成测试,上传时为区别于快照版本,添加-RELEASE后缀,如果只是版本数字号也可以;
(4)无论是上传到快照版仓库还是发行版仓库,公共仓库:maven-public都会保留这两者的jar包,供开发者选择;
(5)发行版和快照版的groupId和artifactId相同,唯一区别是版本号,其中,快照版的版本号使用时间戳作为后缀标识,因为快照版是测试阶段,选择覆盖策略的话,使用时间戳标识不同的测试版;
(6)项目引入私仓的jar包,需要在pom.xml中配置私仓地址(快捷的方式),然后引入对应的jar包即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值