背景
日常工作中经常会出现这样的场景,你需要将自己的服务暴露给其他合作同事使用,在系统规模较小时,打成jar包并且提供给其他合作方使用可以解决这类问题,但是随着系统规模的扩张,通过jar包互传不但容易丢失,还可能造成依赖方之间版本号不一致,这时候就需要使用maven来统一管理服务依赖,一般企业有两种方式,一种是上传到中央仓库,一种是搭建私服。
整体流程
- 在sonatype提交发布工单(Issue)
- 配置gpg秘钥
- 配置pom.xml和setting.xml
- mvn clean deploy
1.在snoatype注册账号并提交issue工单
概要:Publish new maven package
描述:create new package
groupId:可以随便填,sonatype工作人员会根据你填写的project-url帮你修改为固定的groupId
project-url:项目所在地址,如果是gitlab或者gitee就填git对应地址
scm-url:和project-url保持一致即可
其他项:随便填
等待五分钟后系统会给你发邮件告知你可以进行验证了,有两种方式,一种是创建指定git仓库,另一种是添加一个txt文本到你的域名解析里,两种方式都是为了验证你的项目属于你,如下图所示。
验证通过后,同样会发邮件给你
2.安装并设置gpg密钥
gpg的作用是生成密钥对,会用于后续我们组件发布的校验。
下载地址: https://www.gnupg.org/download/,在安装完成后,需要创建密钥对,UI和命令的模式二者选一即可。
UI模式:
运行kleopatra程序,新建密钥对,自己填的密码要记住,后面每次deploy都要进行验证。
命令行模式:
生成key:gpg --gen-key
Real name: 名字
Email address: 邮箱(自己的邮箱
You selected this USER-ID:
Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
之后往下,会让你输入用户名和邮箱,还有一个Passphase(密码输入两次,务必牢记,后续要用到)
查看公钥:
gpg --list-keys
pub rsa2048 2020-06-30 [SC] [expires: 2022-06-30]
85B594371E0A38D70243B1E927EDC1D952E45334
uid [ultimate] aaa 11111111@qq.com
sub rsa2048 2020-06-30 [E] [expires: 2022-06-30]
发布公钥:pub 下面那一长串就是key
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 85B594371E0A38D70243B1E927EDC1D9
3.配置setting.xml,添加server配置
这个id要和下面pom添加的distributionManagement的仓库id保持一致
4.配置pom.xml
4.1 父pom进行替换,可以减轻很多配置包袱
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>
4.2 添加构建仓库路径,打包插件
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- <plugin>-->
<!-- <groupId>org.apache.maven.plugins</groupId>-->
<!-- <artifactId>maven-javadoc-plugin</artifactId>-->
<!-- <version>2.9.1</version>-->
<!-- <executions>-->
<!-- <execution>-->
<!-- <id>attach-javadocs</id>-->
<!-- <goals>-->
<!-- <goal>jar</goal>-->
<!-- </goals>-->
<!-- </execution>-->
<!-- </executions>-->
<!-- </plugin>-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
5.执行deploy
执行 mvn clean deploy -U 即可打包发布
6.依赖拉取
依赖拉取需要指定仓库,因为从2021.2开始,所有新构建包统一上传到s01.oss.sonatype.org,而不是oss.sonatype.org,如果不配置的话,会去默认的oss.sonatype.org拉取。
<repositories>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</repository>
<repository>
<id>ossrh1</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</repositories>