将自己的 jar 包发布到 maven 中央仓库

注册

首先到sonatype官网进行注册!

找到注册“sign up”,如图,进行注册!

175050_plNF_2919251.png

登录

登录后,在页面上方点击“create”进行创建 issue。

获得如下图所示。

175120_RUfe_2919251.png

  • Summary:写你想做什么,你的包的功能。简单概述,要短一点。
  • Description:可以直接复制 summary,然后加一点描述信息。
  • Group Id :推荐写 github。例如我的是 io.github.dslzc ,很快能通过,自己域名的话我没试过,虽然我有自己的域名。
  • Project UR : 你的项目的描述,填写你的项目的 github 地址就可以了。
  • SCM url: 有填写说明的,如https://github.com/DSLZC/dslcode-common-utils.git。
  • Username(s):邀请其他人有权限一起完成这个项目。我当时没填。

等待 Issue 审批通过

网上说需要一天到两天。为何我这一步是秒过的。大概 20 秒过后我就接收到通过邮件了。或许是我填写的 github 比较好认真真实性。

配置 GPG

如果是 Windows 操作系统,需要下载 Gpg4win 软件来生成密钥对。建议大家下载 Gpg4win-Vanilla 版本,因为它仅包括 GnuPG,这个工具才是我们所需要的。

安装 GPG 软件后,打开命令行窗口,依次做以下操作:

  1. 查看是否安装成功

gpg --version

能够显示 GPG 的版本信息,说明安装成功了。

  1. 生成密钥对

gpg --gen-key

此时需要输入姓名、邮箱等字段,其它字段可使用默认值,此外,还需要输入一个 Passphase,相当于一个密钥库的密码,一定不要忘了,也不要告诉别人,最好记下来,因为后面会用到。

  1. 查看公钥

gpg --list-keys

如下:

D:\IdeaProjects\ScriptSpider>gpg --list-keys
pub   rsa2048 2018-01-10 [SC] [expires: 2020-01-10]
      E7135ADD7985270EC66E0B2F735A5D90291062B9
uid           [ultimate] dongsilin <dslzc@foxmail.com>
sub   rsa2048 2018-01-10 [E] [expires: 2020-01-10]

我的公钥是:E7135ADD7985270EC66E0B2F735A5D90291062B9

  1. 将公钥发布到 PGP 密钥服务器

gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys E7135ADD7985270EC66E0B2F735A5D90291062B9

此后,可使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。

  1. 查询公钥是否发布成功

gpg --keyserver hkp://pool.sks-keyservers.net:11371 --recv-keys E7135ADD7985270EC66E0B2F735A5D90291062B9

实际上就是从 key server 上通过公钥 ID 来接收公钥,此外,也可以到 sks-keyservers.net 上通过公钥 ID 去查询。

修改 Maven 配置文件

...     
 <servers>     
     <server>         
     <id>dslcode</id>  // 这里要和后面呼应        
     <username>dslcode</username>    // 登录sonatype的用户名         
     <password>**********************</password>   // 登录sonatype的密码   
     </server>   
 </servers>     
 ...

修改你工程的 pom 文件

你可以增加你自己其他的,这个是我当时的 pom。

   <groupId>io.github.dslzc</groupId>
   <artifactId>dslcode.common.utils</artifactId>
   <version>0.0.1</version>
   <packaging>jar</packaging>

   <name>Java-Common-Utils</name>
   <description>我的常用工具包 Java Common Utils</description>
   <url>https://github.com/DSLZC/dslcode-common-utils</url>

   <licenses>
      <license>
         <name>The MIT License (MIT)</name>
         <url>http://www.opensource.org/licenses/mit-license.html</url>
         <distribution>repo</distribution>
      </license>
   </licenses>

   <developers>
      <developer>
         <name>****</name>
         <email>****@foxmail.com</email>
      </developer>
   </developers>

   <scm>
      <connection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</connection>
      <developerConnection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</developerConnection>
      <url>https://github.com/DSLZC/dslcode-common-utils</url>
   </scm>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>

      <spring.version>4.3.3.RELEASE</spring.version>
      <aspectj.version>1.8.9</aspectj.version>
      <servlet.version>3.1.0</servlet.version>
      <javax.validation.version>1.1.0.Final</javax.validation.version>
      <fasterxml.version>2.8.1</fasterxml.version>
      <commons.io.version>2.4</commons.io.version>
      <dom4j.version>1.6.1</dom4j.version>
      <dozer.version>5.5.1</dozer.version>
      <lombok.version>1.16.10</lombok.version>
      <joda.time.version>2.9.4</joda.time.version>
      <apache.poi.version>3.14</apache.poi.version>
      <thumbnailator.version>0.4.8</thumbnailator.version>
   </properties>

   <dependencies>
      ************
   </dependencies>

   <build>
      <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <addMavenDescriptor>true</addMavenDescriptor>
                        <index>true</index>
                        <manifest>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.1</version>
                <executions>
                    <execution>
                        <id>attach-javadoc</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                  <configuration>
                     <additionalparam>-Xdoclint:none</additionalparam>
                  </configuration>
               </execution>
                </executions>
                <configuration>
                    <show>public</show>
                    <charset>UTF-8</charset>
                    <encoding>UTF-8</encoding>
                    <docencoding>UTF-8</docencoding>
                    <failOnError>false</failOnError>
                    <!--<excludePackageNames>com.dslcode.*</excludePackageNames>-->
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-gpg-plugin</artifactId>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
      </plugins>
   </build>

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

</project>

上传构件到 OSS 中

mvn clean deploy -Dmaven.test.skip=true -Dgpg.passphrase=************ 

有时候会弹出来让你输入Passphase 密码,Passphase 就是 GPG 密钥对的密码,只有自己才知道。在之前的步骤中已经告诉你要牢记了。

随后会看到大量的 upload 信息,而且速度比较慢,如果出现 timeout,需要反复尝试。

在 OSS 中发布构件

打开https://oss.sonatype.org,使用自己的 Sonatype 账号登录后,点击左侧的 Staging Repositories ,在最下方可以看到刚才已上传的构件,或者搜索自己的构件。

这些构件目前是放在 Staging 仓库中,可进行模糊查询,快速定位到自己的构件。

此时,该构件的状态为 Open,需要勾选它,然后点击 Close 按钮。

141710_Bhs6_2919251.png

接下来系统会自动验证该构件是否满足指定要求,当验证完毕后,状态会变为 Closed。

141725_GkzR_2919251.png

如果检查出现问题,会有详细的记录,需要把改构件Drop,解决问题后再重新deploy。

142023_d9Wm_2919251.png

最后,点击 Release 按钮来发布该构件。

142032_hbqM_2919251.png

通知 Sonatype“构件已成功发布”

需要在曾经创建的 Issue 下面回复一条“构件已成功发布”(Hi,my component has been successfully published.thanks!)的评论,这是为了通知 Sonatype 的工作人员为需要发布的构件做审批,发布后工作人员会关闭该 Issue。

我的 issue 展示

通过该截图,你应该知道我们都做了什么。

142722_hvbs_2919251.png

如果是发布的话,请注意 artifactId 不能是 -SNAPSHOT

因为从截图看(经过证明),一旦你的 issue 第一次被批准,你就可以发布-SNAPSHOT了,而且我当时尝试了使用我的-SNAPSHOT版本的 jar,并不需要进行后续操作。

等待构件审批通过

没错,还是要等,我大概等了一个多小时吧。看我的邮件列表的回复。意思大概是 10 分钟就可以使用了,2 小时才能被搜索到。我猜用镜像的应该更慢,需要同步的。感觉他们的效率还是很高,没有我查到的别人用一到两天。

最后,就可以到中央仓库中搜索到自己发布的构件了!中央仓库搜索网站:http://search.maven.org/

143202_vfz4_2919251.png

第一次之后

你就可以安心的开车了 ~

以后的发布流程是:

  1. 构件准备好之后,在命令行上传构建

  2. 在 https://oss.sonatype.org/ “close”并“release”构件

  3. 等待同步好(大约 2 小时多)之后,就可以使用了。

 

OK,准备下车啦!!!!!!!

转载于:https://my.oschina.net/dslcode/blog/1605264

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值