赞
踩
本来只打算测试jar包部署(deploy)到私仓,
可是,发现部署后与预期有些不一样,就又查了些资料,
实际验证了一下对应的功能,
比如,部署jar包区分快照版和发行版,
部署时需要使用不同的版本标识,快照版后缀:-SNAPSHOT,发行版后缀:-RELEASE或者纯版本号,
顺便学习了一下各个仓库的概念,见后文,
分享部署jar包到私仓以及如何引入私仓的jar包,
帮助开发者完善相关的私仓知识。
使用Maven部署jar包到私仓,需要在项目中配置私仓地址,
并且,在本地的Maven中添加私仓的用户名和密码,
这里,需要注意:Maven配置文件的id和项目私仓地址的id保持一致,
部署jar包,区分快照地址和发行版地址,
引用jar包时使用私仓的公共仓库。
| 序号 | 仓库 | 地址 |
|---|---|---|
| 1 | 快照仓库 | http://192.168.211.129:18081/repository/maven-snapshots/ |
| 2 | 发行仓库 | http://192.168.211.129:18081/repository/maven-releases/ |
获取仓库日志操作如下图所示:
快照版仓库:snapshots

发行版仓库:releases

添加属性:distributionManagement,即私仓(Nexus)地址
用于向私有仓库Nexus推送jar包,
其中,
<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包部署到对应的仓库,
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>
在配置文件: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>
这里使用SpringBoot的starter项目作为测试。
将jar包部署到快照仓库,
pom.xml中的版本配置为0.0.1-SNAPSHOT,
标识为快照。

将jar包部署到发行版仓库,
pom.xml中的版本配置为0.0.1-RELEASE,
标识为发行版,也可以只用版本号,如0.0.1。


完成Nexus Repository私有仓库部署,登录私仓后,可以看到多个仓库,
仓库分类如下表所示,
| 序号 | 仓库 | 描述 |
|---|---|---|
| 1 | maven-central | 中央仓库,默认从https://repo1.maven.org/maven2/拉取软件包,可配置 |
| 2 | maven-public | 公共仓库,存储发行版和快照版的软件包,即发行版和快照版的软件包都会在public中 |
| 3 | maven-releases | 发行版仓库,软件包稳定后,发布到该仓库,团队内使用 |
| 4 | maven-snapshots | 快照版本仓库,用于测试软件,发布到线上 |
发布测试jar包到快照版,用于测试功能,即开发环境,
配置的快照版仓库提交策略为可覆盖,即同版本可重复提交,
使用时间戳区分不同的提交,后文:发行版和快照版有什么不同讲解。
进入快照版仓库

快照版jar包

如何删除?

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

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

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

快照版同一个版本的多次提交:

引入私仓jar包,需要在项目中配置私仓的公共仓库地址,
以及对应包的Maven坐标。
首先从私仓的公共仓库maven-public中获取对用jar包的Maven坐标,
获取方式如下图所示。

在项目中添加私有仓库的地址,
通过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,
如下图所示。

status: 401 Unauthorized

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