美文网首页
上传项目到Maven中央仓库

上传项目到Maven中央仓库

作者: linceln | 来源:发表于2021-07-17 14:34 被阅读0次

背景

修改了某个开源库的代码,以适应自己的项目情况。之前是临时发布到 github 静态页面去的,现在 github 访问很不稳定,所以需要发布到中央仓库。

注册帐号

入口有点难找,提示一下,在 Build 选项卡里面
https://issues.sonatype.org/secure/Signup!default.jspa

密码设置十分变态,12位,必须包含大小写数字特殊字符,有必要拿小本本记一下。而且最好不要设置在 xml 中需要转义的特殊字符,比如 &,否则后面配置 xml 时还要转义!不要问我为啥知道的。。

Jira申请

点击新建按钮,提一个 issue,只有申请通过了才有可能上传到中央仓库上,一般 5 分钟左右会有回应,我昨晚 10 点左右申请的,不知道是不是时差问题他们回应比较快:

创建 issue
创建 issue
有几个比较重要的地方说明:

1.问题类型一般选 New Project
2.Group Id 的几点要求

  • 如果是域名的话需要提供证明,或者把你的域名暂时重定向到你的 github主页,这样可以验证,比较麻烦
  • 会推荐使用 io.github.xxx (xxx 是你的 github 账户名)
  • com.github.xxx 不能用了
  • xxx 还需要跟下面的 Project URL 中的账户名对应,比如我这里账户名是 linceln,那么如果我的 Group Id 设置为 io.github.lince 也会审核不通过
    我最早用 jiatu.com 这个域名申请不通过
io.github.lince 也无法审核通过

上传

https://central.sonatype.org/publish/publish-maven/
我这次是上传到 Apache Maven,所以接下来的步骤都是参考以上链接做的,从晚上 9 点一直试到夜里 1 点才搞定,中间踩坑经历稍后会记录一下。

Nexus Staging Maven plugin

配置部署到 OSSRH Nexus Repository Manager 的插件,在 pom.xml 中配置插件:

<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>

此处照抄,所有东西不要去动它,比如 serverId
然后添加仓库管理,id 也不要去改动:

<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>

setting.xml

配置 server,注意,这里的 id 和上面配置的 nexus-staging-maven-plugindistributionManagementid 保持一致,然后填入帐号密码:

<servers>
    <server>
      <id>ossrh</id>
      <username>linceln</username>
      <password>xxxxxxxxxxx</password>
    </server>
</servers>

Javadoc and Sources 插件

JavaDoc 是必须的,因为这个生成时间很长,有的项目会选择打包时跳过 JavaDoc,但是这样最后会导致可以上传到 sonatype.org,但是无法同步到中央仓库,白忙活一场。

<build>
  <plugins>
    <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>
      <executions>
        <execution>
          <id>attach-javadocs</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

GPG 签名组件

<build>
  <plugins>
    <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>

本地还要先有个 GPG 签名,Windows 版本这里下载:
https://www.gpg4win.org/get-gpg4win.html
安装完生成秘钥就好。

有一步比较关键的是要把公钥上传到公共服务器上,这样我们在上传Jar包等文件时对方可以从公共服务器上下载到并且验证你加密过的文件:

# 给公共服务器上传公钥
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys <your key>
# 验证对方是否接收
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys <your key>

打包部署

$ mvn clean deploy -DskipTests

部署成功:


部署完成

闭坑指南

1. 注意部署的地址变了,看很多之前的教程还是用 https://oss.sonatype.org 这个地址,然后上传就报 403。

注意地址变化

2. 401 Unauthorized

这个基本都是帐号密码的问题,检查一下帐号密码是否填对了。另外注意 setting.xml 配置的 <server> 标签,id 是否和 nexus-staging-maven-plugindistributionManagement 配置的 id 一致:

    <server>
      <id>ossrh</id>
      <username>linceln</username>
      <password>xxxxxxxxxx</password>
    </server>

3. 有的教程会教你使用 org.sonatype.oss:oss-parent:7 这样的配置,这样你就完全不用配置了,但是官方已经标记这个方法不推荐使用了,默认还是上传到 https://oss.sonatype.org,报 403。

    <parent>
        <groupId>org.sonatype.oss</groupId>
        <artifactId>oss-parent</artifactId>
        <version>7</version>
    </parent>
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316
官方不推荐使用 oos-parent

4. 记得生成 JavaDocgpg签名,否则虽然可以上传,但是在 https://oss.sonatype.org/#stagingRepositories close 时报错,无法同步到中央仓库,还要重新来过。

保证上传的文件齐全

5. 以前上传完还需要手动 closerelease,现在 Nexus Staging Maven Plugin 插件可以配置自动执行这个过程。

回到https://oss.sonatype.org/#stagingRepositories,选中刚才发布的构件,并点击上方的close–>Confirm,在下边的Activity选项卡中查看状态,当状态变成closed后,执行Release–>Confirm,并在下边的Activity选项卡中查看状态,成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316

现在 close 和 release 自动化了

注意,如果没有 JavaDoc 或者 GPG 签名,这一步无法完成,就会报错。

https://mvnrepository.com/

相关文章

网友评论

      本文标题:上传项目到Maven中央仓库

      本文链接:https://www.haomeiwen.com/subject/mblwpltx.html