手把手教你把Java SDK发布到中央仓库

写了个Java SDK(ava Library),想要让更多的猿媛使用,如何发布到中央仓库(Maven Central)呢?

踩了挺多坑,简单记录下。

1. 向官方申请自己的 groupId

首先,你需要向官方申请唯一的 groupId
。如何申请呢?

1.1. 注册帐户

打开链接,注册一个帐户并登录: https://issues.sonatype.org/secure/Signup!default.jspa

1.2. 创建一个Jira

点击导航栏中的 Create

Project 选择 Community Support - Open Source Project Repository Hosting (OSSRH)


Issue Type 选择 New Project


Summary 可输入 my code project

Group Id 可输入你心仪的(我这里输入的是 com.github.xu42
,如果你需要用自己的域名倒置 一般需要做一下TXT解析

Project URL 输入你的github project地址

SCM url同理

Username 输入你的用户名

这是我之前的,可以参考下: https://issues.sonatype.org/browse/OSSRH-41340

1.3. 等

然后等待官方人员审核,一般2小时,审核通过后,可进行下一步

2. 加密 pgp

安全需要,需要对发布的代码进行pgp加密,如果本机没有安装 pgp
,自行搜索安装一下。

2.1 生成

gpg --gen-key
,根据提示一路走下去,输入的密码要记一下,后面会用到

2.2 发布公钥

怎么发布呢?

gpg --keyserver hkp://keyserver.ubuntu.com --send-keys XXXXXX
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys XXXXXX
gpg --keyserver hkp://keys.openpgp.org --send-keys XXXXXX

这一步就完事了,继续后面的

3. 配置mavensettings.xml

为了避免有不一致的地方,建议直接copy下面,然后更改中文处

<settings>

  <servers>
    <server>
      <id>ossrh</id>
      <username>你的Jira-用户名</username>
      <password>你的Jira-密码</password>
    </server>
  </servers>

  <profiles>
    <profile>
      <id>ossrh</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <gpg.executable>gpg</gpg.executable>
        <gpg.passphrase>你的gpg密码</gpg.passphrase>
      </properties>
    </profile>
  </profiles>

</settings>

4. 配置project的 pom.xml

同样的,为了避免不一致的地方,建议直接copy,更改项目信息为你的

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.github.xu42</groupId>
    <artifactId>china-mobile-number</artifactId>
    <version>1.0.1</version>
    <packaging>jar</packaging>

    <name>${project.groupId}:${project.artifactId}</name>
    <description>China Mobile Check</description>
    <url>https://github.com/xu42/china-mobile-number-java-sdk</url>

    <licenses>
        <license>
            <name>MIT License</name>
            <url>http://www.opensource.org/licenses/mit-license.php</url>
        </license>
    </licenses>

    <developers>
        <developer>
            <name>Xu Yangjie</name>
            <email>xu42.cn@gmail.com</email>
        </developer>
    </developers>

    <scm>
        <connection>scm:git:git://github.com/xu42/china-mobile-number-java-sdk.git</connection>
        <developerConnection>scm:git:ssh://github.com:xu42/china-mobile-number-java-sdk.git</developerConnection>
        <url>https://github.com/xu42/china-mobile-number-java-sdk/tree/master</url>
    </scm>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>3.0.0</version>
                <executions>
                    <execution>
                        <id>attach-javadocs</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <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>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonatype.plugins</groupId>
                <artifactId>nexus-staging-maven-plugin</artifactId>
                <version>1.6.8</version>
                <extensions>true</extensions>
                <configuration>
                    <serverId>ossrh</serverId>
                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                    <autoReleaseAfterClose>false</autoReleaseAfterClose>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5. 打包 发布

终于到了关键的一步了

5.1 打包

在项目目录下执行 mvn clean deploy -e
, 加 -e
主要是为了方便查看失败的原因。

5.2 发布

发布 release 版本: mvn nexus-staging:release

其实这一关键一步,很简单,但可能遇到的坑非常多,下面列出几个,对号入座。

  • 打包阶段,可能会签名失败,报错 gpg: signing failed: Inappropriate ioctl for device


    如何解决?控制台输入 export GPG_TTY=$(tty)
    ,然后重新打包

  • 还是打包阶段,报错 No public key: Key with id:xxxxxx


    如何解决?可能是中央仓库在获取公钥时超时了,所以上面发布公钥发布到了多个地方,也是为了避免这个问题,如果还是出现了,重试、重试、重试

  • 如果出现 rule failue xxxx
    之类的,可能是官方没有审核好呢,等等吧然后继续重试,记得发布后需要在原Jira上备注一下已经release 以便审核。

打包之后,可以在 https://oss.sonatype.org/#stagingRepositories
看到处于 staging
的包,可以查看具体的信息

参考

  1. How to Upload an Open-Source Java Library to Maven Central
  2. Apache Maven

原文 

https://blog.xu42.com/2020/06/27/java-sdk-publish/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 手把手教你把Java SDK发布到中央仓库

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址