您的位置:首页 > 其它

发布Jar包到Maven中央仓库

2018-02-02 10:31 267 查看

注册Sonatype用户

注册地址:https://issues.sonatype.org/secure/Signup!default.jspa

使用了JIRA来管理流程,记住用户名和密码,后面会用到。

发布构件的 Issue

登录进入后,create Issue





之后回收到评论:



如果是你的域名你就可以回复,xxx.com is my domain 完了等待审核,一般一天时间;

审核通过后工作人员会回复如下:



使用 GPG 生成密钥对

下载gpg4win:http://files.gpg4win.org/

选(带vanilla的) gpg4win-vanilla-2.3.4.exe

查看是否安装成功

gpg --version

生成密钥对

gpg --gen-key

会让你选择加密的方式:

lease select what kind

(1) RSA and RSA (default)

(2) DSA and Elgamal

(3) DSA (sign only)

(4) RSA (sign only)

选1,之后往下,会让你输入用户名和邮箱,还有一个Passphase,相当于密钥库密码,不要忘记

查看公钥

gpg --list-keys

pub   2048R/99F1B186 2018-02-02
uid       [ultimate] YaleRen (hello) <royal8848@163.com>
sub   2048R/DBD61A9E 2018-02-02

99F1B186
就是公钥ID

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

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 99F1B186

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

查询公钥是否发布成功

#: gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 99F1B186

gpg: requesting key 99F1B186 from hkp server pool.sks-keyservers.net
gpg: key 99F1B186: "YaleRen (hello) <royal8848@163.com>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

修改Maven配置文件

找到maven的全局配置文件settings.xml,在里面找到 节点,这个节点默认是注释掉的,增加如下配置:

setting.xml

<servers>
<server>
<id>oss</id>
<username>Sonatype 用户名</username>
<password>Sonatype 密码</password>
</server>
</servers>

pom.xml

<project>
...
<name>dexcoder-assistant</name>
<description>dexcoder-assistant is a rapid development kit.</description>
<url>http://www.dexcoder.com/</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>selfly</name>
<email>selfly@foxmail.com</email>
</developer>
</developers>
<scm>
<connection>scm:git:git@github.com:selfly/dexcoder-assistant.git</connection>
<developerConnection>scm:git:git@github.com:selfly/dexcoder-assistant.git</developerConnection>
<url>git@github.com:selfly/dexcoder-assistant.git</url>
</scm>
...
<profiles>
<profile>
<id>release</id>
<build>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<skip>true</skip>
</configuration>
</plugin>

<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.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>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- GPG -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>oss</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>oss</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
...
</project>

pom.xml中必须包括:name、description、url、licenses、developers、scm 等基本信息,使用了 Maven 的 profile 功能,只有在 release 的时候,创建源码包、文档包、使用 GPG 进行数字签名。

此外,snapshotRepository 与 repository 中的 id 一定要与 setting.xml 中 server 的 id 保持一致。

如果是多模块项目的话,只需要在父pom.xml中声明这些,子pom.xml中只需要修改相应的一些信息,如name标签。

上传构件到 OSS 中

mvn clean deploy -P release

当执行以上 Maven 命令时,会自动弹出一个对话框,需要输入上面提到的 Passphase,它就是刚才设置的 GPG 密钥库的密码。

随后会看到大量的 upload 信息,因为在国内网络的缘故,时间有点久,耐心等待吧。

注意:此时上传的构件并未正式发布到中央仓库中,只是部署到 OSS 中了,下面才是真正的发布。

在 OSS 中发布构件

登录 https://oss.sonatype.org

在 OSS 中,使用自己的 Sonatype 账号登录后,可在 Staging Repositories 中查看刚才已上传的构件,这些构件目前是放在 Staging 仓库中,可进行模糊查询,快速定位到自己的构件(
要拉到最下面
)。

此时,该构件的状态为 Open,需要勾选它,然后点击 Close 按钮。系统会自动验证该构件是否满足指定要求,当验证完毕后,状态会变为 Closed



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



这里页面可能要刷新一下才能看到新的状态。

通知 Sonatype 构件已成功发布

这个前面的Sonatype工作人员其实在审核你的Issue时,在comment中已经提示你了,
My repository had released!


在Issue下面回复一条“构件已成功发布”的评论,这是为了通知 Sonatype 的工作人员为需要发布的构件做审批,发布后会关闭该Issue。

等待构件审批通过

这个,又只能等待了,当然他们晚上上班,还是第二天看。当审批通过后,将会收到邮件通知。

从中央仓库中搜索构件

这时,就可以在maven的中央仓库中搜索到自己发布的构件了,以后可以直接在pom.xml中使用了!

中央仓库搜索网站:http://search.maven.org/

第一次成功发布之后,以后就不用这么麻烦了,可以直接使用Group Id发布任何的构件,当然前提是Group Id没有变。

以后的发布流程:

a)构件完成后直接使用maven在命令行上传构建;

b)在https://oss.sonatype.org/ close并release构件;

c)等待同步好(大约2小时多)之后,就可以使用了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Jar maven