SDK上传Maven Central——保姆式教学

1、前期准备

1、注册jira账号

https://issues.sonatype.org/

说明(便于理解账号作用)

OSSRH(Sonatype OSS Repository Hosting)是一个由Sonatype提供的免费的Maven中央仓库代理服务,允许开发者将他们的Maven构件发布到Maven中央仓库,从而使这些构件对全世界的开发者都可用。

为了使用OSSRH,开发者需要先创建一个账号,并申请一个Sonatype JIRA账号,然后将构件上传到OSSRH,通过JIRA账号将构件提交到审核队列。审核通过后,构件将自动转移到Maven中央仓库中,供全世界的开发者使用。这个过程一般称为Maven Central Repository Sync。

2、账号注册完后需要创建申请

接下来进行相关信息填写:

概要:认真填写基本不会有问题,无太多讲究。

Group Id:与项目的Group Id需要保持一致,自己有域名就填自己的域名,如域名为:example.com,则该处填 com.example。若为gitee或github等,按其下面提示连接填写即可。

Project URL: 填代码仓库地址,例如gitee和github等直接定位到项目的链接https://gitee.com/coderzhang2001/excel-sdk的形式,无”.git“后缀。一般为人访问浏览的地址。

SCM URL: 填Project URL+.git的形式,如:https://gitee.com/coderzhang2001/excel-sdk.git。该url用于机器访问和操作。

3、处理申请

     在第二步提交申请后,系统会安排经办人来处理你的申请,没什么特殊问题的话一般都是机器人对你的申请进行处理,流程如下:

对你填写的Group Id进行认证,此步骤用于确保使用的域名属于你本人。

第一步:需要进入自己的服务器服务商提供的管理台,为自己的域名添加TXT记录,记录值便是自己提出申请的标识,如我这是OSSRH-90090。

第二步:可能第一次使用的人不知道什么意思,我一开始也是,实际上就是将自己当前申请设置为Open状态(下图箭头处)。因为当你收到这条信息的时候,你的状态已经被修改为了Waiting for Response(刷新页面后可见)。

当你完成后,机器会自动进行审核(可能需要稍等一小段时间),审核通过后你的申请会变成“已解决”状态并会再发邮件给你,内容大致如下图:

至此,你以及成功完成了前期的准备工作。


接下来,我们可以开始着手项目发布了。

2、GPG签名maven

1、进行maven项目构件签名,以此保证项目的安全性和完整性。

这里需要使用GPG加密,步骤如下(windows教程):

下载地址:https://gnupg.org/download/

下载完成后,启动软件进行GPG证书创建:

接下来填写信息:

进行勾选“使用密码句……”,点击确认后进行输入passphrase,这个需要记住,之后需要用:

接下来右键证书,导出公私密钥文件:

接下来将公钥文件中的公钥发布到OpenPGP Keyserver中,这步非常重要!!!不然之后需要返工。

3、进行maven配置

1、settings.xml配置

首先需要在maven的conf/settings.xml中配置自己的ossrh认证信息以及GPG私钥文件路径之前设置的passphrase

    <server>
        <id>ossrh</id>
        <username>{jira-username}</username>
        <password>{jira-password}</password>
    <privateKey>{/path/xxx_SECRET.asc}</privateKey>
    <passphrase>{certificate-passphrase}</passphrase>
    </server>

2、pom.xml配置

这里的配置非常重要,之后会有审核。

<name>xxxx</name>
    <groupId>{Your-OSSRH-GroupId}</groupId>
    <artifactId>xxxx</artifactId>
    <version>xxx</version>
    <url>xxxxxx</url>
    <description>xxxxx</description>
    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>
    <developers>
        <developer>
            <name>xxx</name>
            <email>xxx</email>
            <roles>
                <role>Developer</role>
            </roles>
        </developer>
    </developers>
    <scm>
        <url>{OSSRH中的Project URL}</url>
        <connection>{OSSRH中的SCM URL}</connection>
    </scm>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
​
​
    <dependencies>
        ……
    </dependencies>
​
​
    <profiles>
        <profile>
            <id>default</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <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.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.8.1</version>
                        <configuration>
                            <source>{your-jdk-version}</source>
                            <target>{your-jdk-version}</target>
                        </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>3.3.1</version>
                        <configuration>
                            <encoding>UTF-8</encoding>
                        </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>
        </profile>
    </profiles>

注意: 由于上传到maven central的maven构件均有严格的规范要求,因此以上配置基本均不可少,少了就容易审核不过再返工。切记!切记!

PS:maven对javadoc的规范有严格要求,因此每个方法均必须有javadoc注释,若没有注释在deploy时会报错。

在以上内容均配置完后便可进行部署了,可使用命令行执行mvn clean deploy或者idea可视化执行。

4、发布

登录Nexus Repository Manager,账号密码无需组测,使用之前注册的jira账号。

若mvn deploy顺利的话,按下面步骤可见到自己发布的maven构件,按下图步骤进行:

一般这时候都会检测到问题,问题主要有两个方面:

1、jar包漏洞

点击closed之后会有邮件发送过来,会报告你的maven项目中存在多少漏洞,根据提示更改jar包版本直到整个项目无漏洞为止。

2、maven信息不足

一般这里都是pom.xml中的配置问题,可在Activity中进行查看审核不通过的项,之后按照提示进行配置pom.xml中的信息即可。

        如果上面两个问题都解决了,那就基本完成了,等待审核通过之后,点击release之后等待几十分钟就会有邮件提示,一切就大功告成了。

以上便是上传自己的SDK到Maven Central的全部步骤了。

一些感想:

我在做这个的时候也是看着博客跟着做,但由于我使用的jdk17以致于pom.xml中加了nexus-staging-maven-plugin之后,报"无法访问java.util.Comparator……"的错误,找遍全网问了好久chatgpt试过各种方法都没有解决,深感网上这类博客太少,为了避免下次再遇到相同的问题解决老半天,写这篇博客以供下次使用,大家有问题可在下面留言(●ˇ∀ˇ●),我看到了都会进行回复。

更多技术文章可见:码文|方寸

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值