文档章节

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

田心双木
 田心双木
发布于 01/10 18:07
字数 1634
阅读 291
收藏 14

注册

首先到sonatype官网进行注册!

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

登录

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

获得如下图所示。

  • 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 按钮。

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

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

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

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

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

我的 issue 展示

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

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

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

等待构件审批通过

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

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

第一次之后

你就可以安心的开车了 ~

以后的发布流程是:

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

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

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

 

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

© 著作权归作者所有

共有 人打赏支持
田心双木
粉丝 12
博文 96
码字总数 55083
作品 0
成都
高级程序员
加载中

评论(1)

_Mr_Right_
_Mr_Right_
手动:赞
如何在电脑上搭建一个私服,实现maven项目的上传和下载?

  在本机上搭建私服 1、去官网下载nexus   下载网址: http://nexus.sonatype.org/ 下载格式:下载war格式 (还有bundle格式 ) : nexus-2.7.0-06.war (直接放入tomat的wabapps中运行)...

科技小能手
2017/11/19
0
0
maven仓库--私服(Nexus的配置使用)

maven--私服的搭建(Nexus的使用)和注意的问题 私服是什么 私服,私有服务器,是公司内部Maven项目经常需要的东东,不总结一下,不足以体现出重视。Nexus是常用的私用Maven服务器,一般是公...

wx58bcafcc6d2c9
2017/05/25
0
0
Linux搭建Maven私服Nexus3.x环境

一、Maven介绍 Apache Maven是一个创新的软件项目管理和综合工具。 Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件。...

898009427
08/06
0
0
1.maven 入门,安装,配置

1.理解: Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reportin......

Daim
2016/03/22
14
0
Maven私服 Nexus的搭建

背景: 私服:私有服务器,是公司内部Maven项目经常用到的私有仓库。Nexus就是一款常用的私用Maven服务器,一般是公司内部使用。 下载地址是:http://www.sonatype.org/nexus/go 默认本地地址...

huoyoung
2016/09/11
94
0

没有更多内容

加载失败,请刷新页面

加载更多

[Hive]JsonSerde使用指南

注意: 重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在...

Mr_yul
16分钟前
0
0
54:mysql修改密码|连接mysql|mysql常用命令

1、mysql修改密码: root用户时mysql的超级管理员,默认mysql的密码是空的,直接可以连接上去的,不过这样不安全; 注释:为了方便的使用mysql,需要把mysql加入到环境变量里; #后续自己输入mys...

芬野de博客
23分钟前
0
0
鼠标单击复制粘贴标签中的内容

<span ref="spanContentOne" id="spanContentOne" style="font-size: 14px;">或许不是最亮眼,总比瞎买强一点</span><!--<input type="button" @click="copyClick('1')" value="复制" />-......

帝子兮
27分钟前
0
0
使用axel多线程疯狂下载

在Linux中比较常见见的下载工具是curl和wget,但是下载比较大的文件两者都不支持多线程, 断点续传的作用不见得能发挥到最大。今天介绍一个axel工具,开启多线程疯狂下载。 安装 Fedora/Cen...

linuxprobe16
30分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部