关于java:手把手教你提交Jar包到Maven公共仓库-萌新写开源02

8次阅读

共计 6815 个字符,预计需要花费 18 分钟才能阅读完成。

在上一篇文章中,我介绍了本人的 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]
      8BDxxxxxxxxxxxxxxxxxxxxxxxxxxxxB50F
uid                      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 8BD96B0EA18E5162B94EA7F754EC3C8FA3A5B50F
gpg: 正在发送密钥 54EC3C8FA3A5B50F 到 pgp.mit.edu:11371
gpg: 发送至公钥服务器失败:文件结尾
gpg: 发送至公钥服务器失败:文件结尾
➜  ~ gpg --keyserver keyserver.ubuntu.com --send-keys 8BD96B0EA18E5162B94EA7F754EC3C8FA3A5B50F
gpg: 正在发送密钥 54EC3C8FA3A5B50F 到 hkp://keyserver.ubuntu.com
gpg: 发送至公钥服务器失败:Network is unreachable
gpg: 发送至公钥服务器失败:Network is unreachable
➜  ~ gpg --keyserver pgp.mit.edu:11371 --send-keys 54EC3C8FA3A5B50F
gpg: 正在发送密钥 54EC3C8FA3A5B50F 到 pgp.mit.edu:11371
gpg: 发送至公钥服务器失败:文件结尾
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…

正文完
 0