在上一篇文章中,我介绍了本人的SpringBoot Starter我的项目,能够让咱们应用注解的形式轻松地获取操作日志,并推送到指定数据源。

之前,我的我的项目开源在Github上,大家想要用我的我的项目,还得把Github仓库配置到Maven的Setting.xml里,一点也不不便。

本文,就整顿一下我把我的项目上传到公共Maven仓库的过程,当做一篇教程文章。

不得不说,上传公共Maven仓库,还是颇费周折的,差点没把人气死。

《萌新学开源》系列文章继续更新:

《萌新写开源01》如何应用注解优雅的记录操作日志

《萌新写开源02》如何提交我的项目到Maven公共仓库 (本文)

《萌新写开源》如何从0到1写一个SpringBoot Starter

《萌新写开源》如何让你的注解反对反复注解

码字不易,求个关注!公众号:后端技术漫谈 ,全网博客名:蛮三刀酱

总体流程

网上有很多文章能够查到,次要是以下几步:

  • 在sonatype提交公布工单(Issue)
  • 配置gpg秘钥
  • 配置pom.xml和setting.xml
  • mvn clean deploy

你必定要问了,sonatype和公共的Maven仓库是什么关系?为什么须要在sonatype进行操作呢?

Maven地方仓库并不反对间接公布jar包。咱们须要将jar包公布到一些指定的第三方Maven仓库,而后该仓库再将jar包同步到Maven地方仓库。其中,最”简略”的形式是通过Sonatype OSSRH仓库来公布jar包。接下来,我会介绍如何将jar包公布到Sonatype OSSRH。

此外,还要重申的一点:网络上的教程都是有时效性的,包含本文也是(本文写于2021年12月)。所以最好的形式,是依照官网的文档去做,遇到问题再配合网上的教程解决,因为官网的文档永远是最新并且最优的解决方案,间接照着博客教程去做有可能会走很多弯路。

官网文档地址:(这是你最应该看的文档没有之一)

https://central.sonatype.org/...

好了,让咱们一步步跟着下面的官网文档来操作。

在sonatype提交工单

第一步,首先你须要在sonatype网站注册账号:

https://issues.sonatype.org/s...!default.jspa

创立好后登录,点击页面上方的新建,来提交一个新的issue。

下图是我创立时候填写的内容,大家能够参考。

次要是几个中央要留神:

  • 问题名称,只有大略表白分明意思即可
  • groupId要写精确
  • Porject URL填写Github仓库地址
  • SCM url须要在Github仓库地址后带git后缀

提交后,我原本认为是人工审核,其实是全自动机器人主动回复你。它要求你证实你对groupId的网址有 所有权,比方我填写的是cn.monitor4all,那么我就要在monitor4all.cn的网站上,增加一个TXT解析,指向这个Issue(值写为OSSRH-xxxxx).

如果你是的groupId填写的是com.github.xxx,则不须要做上述的步骤。所以如果本人没有域名,或者嫌麻烦的,间接用com.github.xxx即可。

因为我的网站域名是本人买的,并且是腾讯云解析的,所以我去腾讯云增加了一条TXT解析值写为OSSRH-75759。(我的工单地址就是https://issues.sonatype.org/b...)

稍等几分钟,sonatype就检测到了你的域名所有权。

配置gpg秘钥

第二部,你须要设置gpg秘钥,官网gps秘钥签名教程:

https://central.sonatype.org/...

你必定会好奇什么是GPG,GPG是一种RSA算法的实现。

1991年,程序员Phil Zimmermann为了避开政府监督,开发了加密软件PGP。这个软件十分好用,迅速流传开来,成了许多程序员的必备工具。然而,它是商业软件,不能自在应用。所以,自由软件基金会决定,开发一个PGP的替代品,取名为GnuPG。这就是GPG的由来。

sonatype既然容许你上传到私有仓库,必定要对你这个“人”,进行鉴权。避免其余歹意的人上传Jar包。

咱们去官网下载GunPG

https://www.gnupg.org/download/

有各种零碎的版本能够下载,我下载了MacOS版。

装好后,咱们关上ssh,输出命令:

➜  ~ gpg --generate-key

紧接着跟着操作就能生成秘钥,以下是我的生成后果,打了码:

gpg (GnuPG/MacGPG2) 2.2.32; Copyright (C) 2021 Free Software Foundation, Inc.This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.留神:应用 “gpg --full-generate-key” 以取得一个全功能的密钥生成对话框。GnuPG 须要构建用户标识以识别您的密钥。实在姓名: xxxxxxx电子邮件地址: xxxxxxx@foxmail.com您选定了此用户标识:    “xxxxxxxx <xxxxx@foxmail.com>”更改姓名(N)、正文(C)、电子邮件地址(E)或确定(O)/退出(Q)? u更改姓名(N)、正文(C)、电子邮件地址(E)或确定(O)/退出(Q)? o咱们须要生成大量的随机字节。在质数生成期间做些其余操作(敲打键盘、挪动鼠标、读写硬盘之类的)将会是一个不错的主见;这会让随机数发生器有更好的机会取得足够的熵。咱们须要生成大量的随机字节。在质数生成期间做些其余操作(敲打键盘、挪动鼠标、读写硬盘之类的)将会是一个不错的主见;这会让随机数发生器有更好的机会取得足够的熵。gpg: 密钥 54EC3C8FA3A5B50F 被标记为相对信赖gpg: 目录‘/Users/xxxxxxxxx/.gnupg/openpgp-revocs.d’已创立gpg: 撤消证书已被存储为‘/Users/xxxxxxxxx/.gnupg/openpgp-revocs.d/xxxxxxxxxxxxxxxxxxxxxxxxxxxx.rev’公钥和私钥曾经生成并被签名。pub   rsa3072 2021-12-06 [SC] [无效至:2023-12-06]      8BDxxxxxxxxxxxxxxxxxxxxxxxxxxxxB50Fuid                      xxxxxxxx <xxxxxxxx@foxmail.com>sub   rsa3072 2021-12-06 [E] [无效至:2023-12-06]

秘钥生成好后,须要你把公钥上传到公共服务器供sonatype验证。

官网教程里有三个地址能够用:

  • keyserver.ubuntu.com
  • keys.openpgp.org
  • pgp.mit.edu

我依照官网给的方法上传:

➜  ~ gpg --keyserver pgp.mit.edu:11371 --send-keys 8BD96B0EA18E5162B94EA7F754EC3C8FA3A5B50Fgpg: 正在发送密钥 54EC3C8FA3A5B50F 到 pgp.mit.edu:11371gpg: 发送至公钥服务器失败:文件结尾gpg: 发送至公钥服务器失败:文件结尾➜  ~ gpg --keyserver keyserver.ubuntu.com --send-keys 8BD96B0EA18E5162B94EA7F754EC3C8FA3A5B50Fgpg: 正在发送密钥 54EC3C8FA3A5B50F 到 hkp://keyserver.ubuntu.comgpg: 发送至公钥服务器失败:Network is unreachablegpg: 发送至公钥服务器失败:Network is unreachable➜  ~ gpg --keyserver pgp.mit.edu:11371 --send-keys 54EC3C8FA3A5B50Fgpg: 正在发送密钥 54EC3C8FA3A5B50F 到 pgp.mit.edu:11371gpg: 发送至公钥服务器失败:文件结尾gpg: 发送至公钥服务器失败:文件结尾

然而,报错了,重复尝试了各种网上教程,仍然报错。我认为是我网络的问题,或者是那几个服务器也生效了,反正一遍遍的排查,折腾了一个早晨。

就当快要解体时,我无心中发现gunpg还是有利用能够关上的,也就是有GUI界面,于是我进去看了看,而后在我的秘钥点击右键,有上传的服务器的选项:

这样竟然传胜利了,真是大无语啊兄弟们。

配置pom.xml和setting.xml

第三步,你须要依照官网的教程,来配置你的pom.xml和setting.xml文件。大家看到这里曾经很累了,我就不依照官网教程那样一步步演示了,间接给你们总结下胜利须要增加的配置。

首先是setting.xml。

你须要增加一个profile:

<profiles>    <profile>      <id>ossrh</id>      <activation>        <activeByDefault>true</activeByDefault>      </activation>      <properties>        <gpg.executable>gpg2</gpg.executable>        <gpg.passphrase>yzdbwj1993</gpg.passphrase>      </properties>    </profile>  </profiles>

还须要一个server,外面须要填写你的ossrh账号密码:

  <servers>    <server>      <id>ossrh</id>      <username>你下面注册的账号</username>      <password>你下面注册的明码</password>    </server>  </servers></settings>

setting.xml配置好了,接下来是你我的项目的pom.xml。

首先,你须要申明很多plugin,以及一个snapshotRepository,我把所有的都贴在了这里。

<distributionManagement>    <!--  申明打包到Maven私有仓库  -->    <snapshotRepository>        <id>ossrh</id>        <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>    </snapshotRepository></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>            <configuration>                <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable>            </configuration>            <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>

留神,在maven-javadoc-plugin这个插件增加后,最如同下面一样,加上一个官网教程没有提到的:

<configuration>    <javadocExecutable>${java.home}/../bin/javadoc</javadocExecutable></configuration>

否则你可能会编译失败,提醒找不到你的JAVA_HOME环境变量,就像下图这样:

MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set.

之后,你还能够增加上你的一些个人信息:

<licenses>  <license>    <name>The Apache Software License, Version 2.0</name>    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>    <distribution>actable</distribution>  </license></licenses><developers>  <developer>    <name>xxxxxxxxx Yang</name>    <email>xxxxxxxxx@foxmail.com</email>    <organization>xxxxxxxxxx</organization>  </developer></developers><scm>  <tag>master</tag>  <url>git@github.com:qqxx6661/logRecord.git</url>  <connection>git@github.com:qqxx6661/logRecord.git</connection>  <developerConnection>git@github.com:qqxx6661/logRecord.git</developerConnection></scm>

正式打包公布

最初,所有都筹备好了,你能够进行最神圣的一个指令

mvn clean deploy

紧接着就上传胜利了

你的工单这时候也会更新一条信息:

Central sync is activated for cn.monitor4all. After you successfully release, your component will be available to the public on Central https://repo1.maven.org/maven2/, typically within 30 minutes, though updates to https://search.maven.org can take up to four hours.

你的Jar包会在30分钟左右可能被拉取。

下图就是胜利的截图拉。

后记

不晓得看完文章,你觉不感觉麻烦呢?其实我本人看一遍写的文字,感觉步骤还是蛮简略的。但本人之前搞不定的时候,还是感觉蛮苦楚的。

心愿我走的弯路,能帮大家避开大坑,更快的实现本人我的项目的上传。

我是目前在阿里搬砖的工程师蛮三刀酱。

继续的创作离不开你的点赞和转发分享!

参考

https://segmentfault.com/a/11...