如何发布自己的项目到Maven中央仓库

347 阅读6分钟

前几天我不是开源了我的xxy-copybook项目吗,我就想着给他也发布到中央仓库里,大家使用起来也能方便些,这里把我发布的过程记录一下,有需要发布项目需求的小伙伴也可以有个参考。

1、注册Github账号

注册github账号,这个不用多说了,coder都懂。

2、注册sonatype账号

注册地址:issues.sonatype.org/secure/Sign…

他们这个这个密码的复杂程度真是够变态的。长度12位以上,还要需要包括小写、大写字母,数字,特殊符号,不能和用户名和email类似,没有密码记录软件的小伙伴还是找个记事本先记下来吧。

注册好了是这样的,看来他们也知道这个密码太复杂了,怕有人刚才给忽略了,在这里竟然直接提示你可以写一个新密码,这真是太可爱了😊

3、发布申请

万幸我记住了我的密码,接下来登录,然后选择这里进行新建。

\

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

问题类型选择:New Project,只有在你的项目选择选对了才会有这个选项。

摘要和描述,根据情况描述一下吧,审核人员不知道会不会中文,所以最好使用英文描述,我的英文一般,只要让审核人员能看懂就OK了。

GroupId:如果你有自己的域名那么就使用你自己的域名,后边会让你验证域名的所有权,需要配置DNS。如果你没有自己的域名,可以使用github提供的二级域名。根据审核人员的要求,会让你在账号上创建项目来验证账号所有权。

Project URL:这里填写你项目的地址,一般就是在github上的项目地址。我这个项目的地址是这个:github.com/radium0028/…

SCM URL:这里是项目的源码地址了,一般是你clone地址。都说只能使用https协议的地址,这个没测试,我们就使用https的地址就好了。我这个项目的地址是这个:github.com/radium0028/…

Usernames,使用逗号分隔的形式,填写可以进行部署的用户列表。可选。

Already synced to central:是否已经同步到中央仓库,这里选No。

这个流程和国内发布很多东西的流程就不一样,国内大部分都会是让你在线验证,然后一直在授权,电子签名,文件盖章,最让我讨厌的是还要打款认证,不让我花点钱,这些厂商心理就不舒服,很少有人工参与到发布过程中。到底是我们的流程效率高,还是老外的流程会更仔细呢?

3.1 验证GroupId信息

在发布申请后sonatype的后台审核人员会确认你是否拥有GroupId的所有权,如果你是自己的个人域名,需要新建一条域名的txt记录,具体的内容要看审核人员给你指导。

如果你和我一样使用github提供的二级域名来作为你的groupid,那么就很简单了,在你发布问题后,会有一个问题ID,就在下边这张图上的内容,在你的github仓库中,创建一个公开的项目,项目名称就是这个ID,这样后台的审核人员就能确认你的groupid权限了。

当你能看到审核人员这样的评论时,就代表你的sonatype账号已经准备好了,可以开始发布你的项目了。

在等待审核员处理的时候你可以继续向下操作,这样就可以在审核人员通过后,立刻发布项目,不要耽误时间。

4、GPG签名

所有发布到Maven仓库中的文件都要使用GPG签名,以便让使用者可以验证文件的正确性,我们需要在本地安装GPG来进行签名。

下载地址:gpgtools.org

安装都是下一步没什么好说的,过程中会让我选中语言,结果只有个英文,那还让我选个毛线~😒

安装后会自动启动,在这里他让我们创建一对秘钥。填写用户名、邮箱、密码就可以了,高级选项都默认。可要把密码记好啊!

秘钥在创建好了以后,它说为了让朋友和同事更方便找到公钥,建议我上传到秘钥服务器上。接着警告我说秘钥服务器是公共的,在秘钥中的名称和电子邮件将公开可见。并且秘钥无法删除,只能撤销。如果不使用这个秘钥服务器,就要考虑将秘钥附加到签名和加密的电子邮件里。我是无脑上传了,名字和email,不发给他也是在互联网上到处飞了,无所谓。

上传成功。

5、配置Maven仓库和项目的POM.xml

5.1 配置Maven仓库

用你喜欢的编辑器打开Maven的setting.xml文件,如果你单独配置过,那么应该到USER/.m2/settings.xml这里来找这个文件,从来没配置过那默认应该是在这个地方USER/.m2/settings.xml这里来找这个文件,从来没配置过那默认应该是在这个地方MAVEN_HOME/conf/settings.xml。在文件中添加sonatype的账号信息。如果你不希望使用明文显示你的密码,可以去s01.oss.sonatype.org/申请个token账号进行配置。

将生成的内容,粘贴到你的settings.xml文件中。

<server>
  <id>ossrh</id>
  <username>you name</username>
  <password>you password</password>
</server>

现在重新打开项目的pom.xml文件,配置一下项目信息,主要是使用的开源协议,开发者信息等。根据你的实际情况进行调整。

<!--  设置开源协议-->
  <licenses>
    <license>
      <name>AGPL-3.0-or-later</name>
      <url>https://spdx.org/licenses/AGPL-3.0-or-later.html</url>
    </license>
  </licenses>
<!--  设置scm-->
  <scm>
    <connection>https://github.com/radium0028/xxy-copybook.git</connection>
    <url>https://github.com/radium0028/xxy-copybook</url>
  </scm>
<!--  开发者信息-->
  <developers>
    <developer>
      <name>Radium</name>
      <email>your email</email>
      <roles>
        <role>Developer</role>
      </roles>
      <timezone>+8</timezone>
    </developer>
  </developers>

5.2 配置release信息

这里的distributionManagement地址要注意一下,从2021年2月份开始,所有新项目的仓库地址都变更到了s01.oss.sonatype.org/

<profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-deploy-plugin</artifactId>
            <version>2.8.2</version>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
              <source>${maven.compiler.source}</source>
              <target>${maven.compiler.target}</target>
              <fork>true</fork>
              <verbose>true</verbose>
              <encoding>UTF-8</encoding>
              <showWarnings>false</showWarnings>
            </configuration>
          </plugin>
          <!-- Source -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.2.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- Javadoc -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.9.1</version>
            <configuration>
              <show>private</show>
              <nohelp>true</nohelp>
              <charset>UTF-8</charset>
              <encoding>UTF-8</encoding>
              <docencoding>UTF-8</docencoding>
              <additionalparam>-Xdoclint:none</additionalparam>
            </configuration>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <!-- GPG 验签 -->
          <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>
        </plugins>
      </build>
      
      <distributionManagement>
        <snapshotRepository>
          <id>ossrh</id>
          <name>Sonatype Nexus Snapshots</name>
          <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
          <id>ossrh</id>
          <name>Nexus Release Repository</name>
          <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
      </distributionManagement>
    </profile>
  </profiles>

6、发布Jar

都配置好以后就可以打包上次了。在上传的过程中会需要GPG的密码。

mvn clean deploy -P release -DskipTests

当你能看到这些上传成功的内容后,就表示发布成功了,但是还没有结束,我们还需要到repository manager去做最后的发布。

登录到s01.oss.sonatype.org/#stagingRep…,还是使用sonatype注册的账号和密码登录,查看发布后的库情况。

选中你发布的库,然后点击close。

在点击close后,后台会对项目进行一些检查,这些都是机器检查的,速度很快,不到1分钟就能OK。

所有有的检查项目都通过后,点击上边的Release按钮才真正发布你的项目。发布成功后使用groupid进行搜索,没有意外你应该能看到发布的内容啦。

到这里你的库已经上传到Maven中央仓库了,阿里云会逐渐的同步过来,最后别忘记回到sonatype感谢一下帮你发布的审核人员,然后关闭Issue,祝你发布顺利!

7、可能会遇到的问题

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project xxy-copybook: Failed to deploy artifacts: Could not transfer artifact com.gitee.radium:xxy-copybook:jar:1.0-Release from/to ossrh (https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/): transfer failed for https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/com/gitee/radium/xxy-copybook/1.0-Release/xxy-copybook-1.0-Release.jar, status: 400 Bad Request -> [Help 1]

检查和尝试用下边的几个办法来解决:

  1. 在pom.xml文件中distributionManagement节点配置下的id标签里的值,要和maven的settings.xml配置文件中server节点下的id是一致的,还要确认你配置的settings.xml是不是maven编译是使用的配置文件。如果使用了token认证,需要在到s01.oss.sonatype.org/去确认token,内容别写错了。
  2. 看看你pom.xml问你中配置的groupid文件,和你申请的groupid是不是一致。