如何发包到中央仓库-完整教程

发布时间 2023-11-01 15:13:10作者: mingshan

相信很多小伙伴自己都会有一些包,我们可以将包发布中央仓库,然后直接通过maven来使用这些包,下面就整理下如何将包发到中央仓库。

新建项目

第一步,我们需要在sonatype上注册一个账号,这一步就不再演示了。

注册好账户之后,然后我们来创建项目。点击新建按钮,问题类型 选择 New Project,如下所示:

image

在该页面中,注意需要添加groupId,项目的描述信息等,填写完毕后进行保存。用过jira的同学对这个系统肯定十分熟悉,因为就是jira。

注意如果groupId以前没有在这个上面使用过,那么第一次使用需进行注册,然后才可以发包,新建好的项目会收到以下评论:

image

翻译过来有以下几点:

如果你有自己的域名,groupId就可以是将域名反转过来的,比如fun.mingshan,那么你可以:

  • 在你的域名添加一条DNS解析,需要是TXT 类型的,指向当前创建的issue
  • 重新打开这个一条issue

如果你没有自己的域名,那么你可以:

  • 使用github这种开放的域名,不过需要创建一个仓库来验证github账户的权限

大概是这样,我选用有域名添加一条DNS解析这种操作,十分快捷。DNS解析规则如下:

image

上面的操作完,等issue的状态变为已解决时,会收到一条评论:

image

我们接下来就可以将包发送到中央仓库了。

更新pom.xml文件

增加开源协议,坐着,SCM信息等,具体信息可以参考:

  <groupId>fun.mingshan</groupId>
  <artifactId>markdown4j</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>markdown4j</name>
  <description>To solve the problem of not quickly generating Markdown files at the Java level, using builder mode, very simple to use.</description>
  <url>https://github.com/mstao/markdown4j</url>

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

  <developers>
    <developer>
      <name>Walker Han</name>
      <email>walkerhan@126.com</email>
    </developer>
  </developers>

  <issueManagement>
    <system>Github Issue</system>
    <url>https://github.com/mstao/markdown4j/issues</url>
  </issueManagement>

  <scm>
    <connection>scm:git:https://github.com/mstao/markdown4j.git</connection>
    <developerConnection>scm:git:https://github.com/mstao/markdown4j.git</developerConnection>
    <url>https://github.com/mstao/markdown4j</url>
    <tag>${project.version}</tag>
  </scm>

  <inceptionYear>2022</inceptionYear>

增加插件:

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.18.1</version>
        <configuration>
          <skipTests>true</skipTests>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-source-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <attach>true</attach>
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <version>3.7.1</version>
      </plugin>
      <!-- Javadoc -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>

        <configuration>
          <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
          <additionalJOptions>
            <additionalJOption>-Xdoclint:none</additionalJOption>
          </additionalJOptions>
        </configuration>
      </plugin>
      <!-- Gpg Signature -->
      <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:

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

更新maven settings.xml文件

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>your-jira-id</username>
      <password>your-jira-pwd</password>
    </server>
  </servers>
</settings>

配置PGP公匙信息

Windows下使用gpg4win来进行配置。下载地址 https://www.gpg4win.org/get-gpg4win.html。

下载安装完后,打开命令行执行:gpg --gen-key,来生成公匙信息,注意此步需要输入sonatype 网站上的用户名,邮箱信息,必须保持一致。如下所示:

image

生成的过程中,会有个弹框要求输入Passphase信息,这个是密钥的密码,同样需要记牢。十分重要,后续在进行发布包的时候要用到的,如下:

image

上面操作完之后,会生成公匙,需要将公钥发布到 PGP 密钥服务器,两个密钥服务器都发布一下:

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 公钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 公钥ID

查询公钥是否发布成功

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 公钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 公钥ID

使用 gpg --list-keys 命令查询配置好的公私钥信息

image

打包推送

使用mvn clean deploy进行编译部署,会将当前SNAPSHOT包推送到OSS 里面,注意这一步需要用到Passphase

发布RELEASE

大致流程:

Maven发布 -> Sonatype Close  -> Sonatype Release

Maven发布

关于如何利用maven进行发布的操作,这里就不详细介绍了,可以参考另一篇文档: Maven发布RELEASE包到云效私有仓库并打TAG

主要有两步操作:mvn release:preparemvn release:perform

Sonatype Close

发布完正式RELEASE 后,此时会将正式包推送到 staging Repositories,进入oss.sonatype,选择你刚才发布的包,然后点击Close 按钮,会弹出确认框,如下所示:

image

Sonatype Release

Close 完之后,我们就可以进行Release了。点击Release按钮,需要等待一会,可以点击下边的Activity选项卡中查看状态。等待一会,会收到邮件,告诉你已经同步中央仓库了。

image

image

至此,流程已经走完了。同步到中央仓库的时间比较漫长,耐心等待即可。

加图标

另外,我们看到很多仓库都有很多图标,比如编译状态,中央仓库版本等,类似下面这种:

image

我们可以使用:https://shields.io/ 这个网站来生成,选择对应的项目生成就可以了。

参考


title: 如何发包到中央仓库-完整教程
categories: Maven
tags: [Maven]
author: Mingshan
date: 2022-01-21