Solo  当前访客:0 开始使用

Maven工程打包发布到中央仓库实战与踩坑

从申请 sonatype 账号到发布,几乎全部都是英文环境,步骤多而繁杂,我也是一顿搜索才知道具体的流程,在过程中还踩了不少坑,故在此总结一下。

参考

我在sonatype的例子
https://issues.sonatype.org/browse/OSSRH-51378

申请sonatype账号

https://issues.sonatype.org/secure/Signup!default.jspa
按照上面的填就好

提交一个 New Project 的 issue

项目:Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型:New Project

后面的内容就按照实际情况填写
groupId如果你写的是com.xxx的话,一会提交审核的时候,会让你校验你是否用用xxx.com这个域名。

提交完之后,大概等待个几个小时,就会有工作人员回复你了。

我这边的回复是

Do you own the domain wellch4n.com? If so, please verify ownership via one of the following methods:

* Add a TXT record to your DNS referencing this JIRA ticket: [~~OSSRH-51378~~](https://issues.sonatype.org/browse/OSSRH-51378 "Redis-Schedule-Spring-Boot-Starter") (Fastest)
* Setup a redirect to your Github page (if it does not already exist)

If you do not own this domain, please read:  
[http://central.sonatype.org/pages/choosing-your-coordinates.html](http://central.sonatype.org/pages/choosing-your-coordinates.html)  
You may also choose a groupId that reflects your project hosting, in this case, something like io.github.wellch4n or com.github.wellch4n

Would you like to use a free managed security reporting service (recommended)?  
Put [https://hackerone.com/central-security-project/reports/new](https://hackerone.com/central-security-project/reports/new) as your project's security issue reporting URL. We'll take care of the rest.  
For more details on the Central Security Project, visit [https://www.sonatype.com/central-security-project](https://www.sonatype.com/central-security-project)

大概意思就是,如果你拥有域名,你就设置一个txt解析到这个issue的页面上。
如果没有的话,你就要改groupId,改成io.github.xxx或者com.github.wellch4n这种格式。

我因为拥有wellch4n.com的域名,所以我在我的@主机记录,选择了一个TXT的记录类型,解析到 https://issues.sonatype.org/browse/OSSRH-51378 上。
之后,你需要回复这个issue,等待工作人员回复

配置GPG

我这边开发环境是macOS,所以我这边直接使用
brew install gpg 就完事了,其他系统有不同的安装方法。

然后在命令行输入 gpg --gen-key 生成key
其中会让你输入一次公钥,一定要记住你的密码

生成完成之后,gpg --list-keys 如果有结果就没问题了,顺便记住你的公钥,也就是很长那一段。

一号坑

我们需要把我们生成的公钥提交到公共的服务器上,因为我国特殊的网络环境因素,会导致上传异常。
所以我们先ping一下域名,通过IP + 端口号的方式提交到公共服务器上。
如果这一步失败,会导致后面无法通过加密。

需要提交的server

hkp://130.206.1.8:11371
hkp://18.9.60.141:11371
hkp://162.213.33.9:11371

通过

gpg --keyserver hkp://162.213.33.9:11371 --send-keys 你的公钥

等待审核完

等待审核完之后,你需要把自己的Maven配置修改一下

<server>
  <id>oss</id>
  <username>你登录sonatype的账号</username>
  <password>你登录sonatype的密码</password>
</server>

二号坑

此时你项目的pom.xml也需要修改

<distributionManagement>
    <snapshotRepository>
        <id>oss</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
    </snapshotRepository>
    <repository>
        <id>oss</id>
        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
</distributionManagement>

此处的标签 需要和 Maven配置里面的一致。

开始提交到oss

三号坑

在开始提交之前,你先要检查一下自己的plugins配置,因为提交到Maven仓库,需要校验很多东西,比方说文档、加密之类的。
我这里直接贴上我的配置。

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>8</source>
            <target>8</target>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.2.1</version>
        <executions>
            <execution>
                <phase>package</phase>
                <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>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>1.6</version>
        <executions>
            <execution>
                <phase>verify</phase>
                <goals>
                    <goal>sign</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
</plugins>

到此为止,你才可以提交代码到sonatype的oss上,还并没有提交到中央仓库。

提交到中央仓库

mvn clean deploy

总算可以执行这条命令了,在执行的时候,会让你输入你之前生成的GPG的密码。校验完成之后就开始上传了。

我们转场到
https://oss.sonatype.org

点击右上角的Login in,账号密码同样也是sonatype的账号密码。

登录完成值会后,选择左边的Staging Repositories,我们要开始构建我们的项目了,在众多的项目里面,你可以通过Search你的groupId来找到你刚才上传到oss的那一个,不出意外,现在你的Repository应该处于open状态。

点击上面的close,你的项目就开始检查了,其中会检查签名、文档、source和jar,其中缺少任何一个,都会导致close失败,需要重新执行上面的步骤发布到oss。

四号坑

这里就关系到你的代码,你的@author注解、还有接口的注释等等都需要描述出来。
pom.xml要注明开发者信息以及代码信息,以我的举例

<licenses>
    <license>
        <name>The Apache Software License, Version 2.0</name>
        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        <distribution>repo</distribution>
    </license>
</licenses>

<scm>
    <tag>master</tag>
    <url>git@github.com:cloudnil/marathon-client.git</url>
    <connection>scm:git@github.com:wellCh4n/Redis-Schedule-Spring-Boot-Starter.git</connection>
    <developerConnection>scm:git@github.com:wellCh4n/Redis-Schedule-Spring-Boot-Starter.git</developerConnection>
</scm>

<developers>
    <developer>
        <name>wellCh4n</name>
        <email>wellCh4n@foxmail.com</email>
    </developer>
</developers>

检查完成

所有的检查都完成,你的Repository会有一个release的按钮,你点击release之后就算发布完成了。
然后你需要在issue里面回复,我已经完成了之类的,当然你需要用英文回复。

稍等片刻,工作人员会告诉你

Central sync is activated for com.wellch4n. After you successfully release, your component will be published to Central, typically within 10 minutes, though updates to search.maven.org can take up to two hours.

最快十分钟会更新到中央仓库,两小时左右你可以在search.maven.org上查看到你的包。

至此,你就已经成功了。

尾巴

第一次发布确实步骤比较复杂,之后的话就比较简单了,只要直接deploy就行。
这个配置只在本机有效,如果换机器的话,你需要重新配置一下。


标题:Maven工程打包发布到中央仓库实战与踩坑
作者:wellCh4n
地址:http://www.wellch4n.com/articles/2019/09/09/1567963163202.html