本文将详细介绍所有向Maven中央仓库提交SDK(对于JAVA即是jar包)的流程。如果您已经完成了整个流程但遇到一些问题,可以直接跳到文末,那里总结了很多遇到的问题以及解决的方案。
为了向Maven中央仓库提交SDK,我们首先要向sonatype系统提交工单
如果没有账户,首先注册账户
选择Create Issue 创建发布 按照要求填写信息
其中需要注意的是,groupId就是我们jar包导入时的groupld,一般我们使用域名
点击确定后需要等待工作人员review,美国有时差,往往需要一天的确认时间
工作人员确定后,Issue的状态会变为绿色的RESOLVED
开通时工作人员会在Issue下面的comments回复信息,信息包含了我们发布release、snapshots版本的地址。这个地址我们之后配置要用到,我们发布自己的包到这两个地址。
GPG是一种加密签名命令行工具,maven官方要求在上传时使用这个软件做加密。在向Maven中央仓库提交SDK的过程中,安装并启用GPG主要需要进行以下四个步骤。
# mac 环境
brew install gpg
# Debian / Ubuntu 环境
sudo apt-get install gnupg
# Fedora / CentOS环境
yum install gnupg
# mac 环境
# mac环境一切gpg开头的命令,都需要使用gpg2代替
gpg2 --help
# 其他环境
gpg --help
输入下面的命令后,会进行一系列步骤,基本都选择默认选项即可。还会被GPG要求填写真实姓名,填写电子邮箱。之后需要输入一个私钥密码,这个私钥密码用来保护我们的私钥不被滥用,输入一个密码并记住它。具体为什么需要进行上述这些步骤,可见GPG简介。
gpg --gen-key
生成后要将公钥上传至服务器。下述命令最后用自己的公钥替换,公钥是一串十六进制的数字,例:DE346FA5。请不要使用上述举例的公钥,要使用上一步自己生成的公钥。
gpg --keyserver http://http-keys.gnupg.net --send-keys 你的公钥
setting.xml文件用来进行账户密码的配置。
理论上,如果我们想让整台机器都能适用这个上传功能,我们应该在conf/目录下的setting.xml文件进行配置。但一般情况下在.m2/目录下配置就能满足需要,还有就是有时我们没有修改conf/目录下文件的权限。
sonatype-nexus-snapshots
注册sonatype工单的用户名
注册sonatype工单的密码
sonatype-nexus-staging
注册sonatype工单的用户名
注册sonatype工单的密码
上述配置在
有的人的配置只用了一个
这里的POM文件指的是我们要发布的Jar项目的目录中的根POM文件。POM文件中除了自己需要配置的依赖和插件以外,必须要进行下面这些内容的配置。
首先在POM文件开始处,整个
org.sonatype.oss
oss-parent
7
其中
按照回复中提供的地址填入url即可,有的人会在
sonatype-nexus-snapshots
https://oss.sonatype.org/content/repositories/snapshots
sonatype-nexus-staging
https://oss.sonatype.org/service/local/staging/deploy/maven2/
上述三个标签都是Maven要求我们必须提供的,但实际上对于SDK上传成功的帮助并不大。配置的位置在
licenses
name - 随便设置一个name
url - 一个在第一步提交工单时填入的项目url
developer
id - 随便设置一个id
name - 开发者姓名,随意填写
email - 自己的邮箱
scm
scm中的三个标签可以都不填
The Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0.txt
gwon sdk
GWON SDK
[email protected]
上述三个标签都是Maven要求我们必须提供的,但实际上对于SDK上传成功的帮助并不大。配置的位置在
这三个标签的内容均可随意填写。
GWON SDK
https://www.gwon.com/
this is my sdk, ths.
我们需要配置一些maven运行中要使用到的插件,下面的内容配置在
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
1.6
UTF-8
org.apache.maven.plugins
maven-jar-plugin
2.3.2
org.apache.maven.plugins
maven-javadoc-plugin
2.10.4
${chartset.UTF8}
true
${chartset.UTF8}
${chartset.UTF8}
attach-javadocs
package
jar
-Xdoclint:none
一般情况下我们提交了SDK到中央仓库后,需要提交到sonatype进行审批再发布,这个插件可以帮我们自动提交,让整个过程自动化,虽然这个插件不是必须的,但是强烈推荐使用的插件。内容配置在
org.sonatype.plugins
nexus-staging-maven-plugin
1.6.3
true
sonatype-nexus-staging
https://oss.sonatype.org/
true
这个插件帮助我们自动进行gpg的签名,虽然这个插件不是必须的,但是强烈推荐使用的插件。内容配置在
org.apache.maven.plugins
maven-gpg-plugin
1.5
sign-artifacts
verify
sign
部署只需要使用mvn命令即可。下面的命令中最后需要使用你的私钥密码,clean是可选项,用来清理之前生成的构件,-P sonatype-oss-release 是必选项,这个
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=你的私钥密码"
进入sonatype并登录
点击左侧的Advanced Search搜索你的artifactId名称即可
在整个配置的过程中可能存在很多问题,下面对常见的问题提供一些解决的方案。
造成这些的原因可能不是你的项目存在问题,而是mvn命令在执行的时候到中央仓库下载相关包的速度太慢,导致时间超限直接报错。解决方法是用国内的Maven仓库镜像代理,下面提供一个比较快的阿里云镜像,我们将其配置在.m2/setting.xml中
alimaven
central
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
有很多人安装了GPG之后没把自己的公钥上传,这会导致Maven中央仓库找不到你的公钥无法匹配。解决方法是运行命令行上传公钥。
gpg --keyserver http://http-keys.gnupg.net --send-keys 你的公钥
理论上这不是问题,但是有的情况下我们需要自动化整个发布流程不能存在这种交互的形式。解决方法是在POM文件中导入相关包跳过这个步骤。
org.apache.maven.plugins
maven-gpg-plugin
1.5
sign-artifacts
verify
sign
mac中的gpg是比较特殊的,我们在命令行中要用gpg2来代替gpg。下面是mac电脑的安装方式。
brew install gpg
gpg2 --help
gpg2 --gen-key
gpg2 --keyserver http://http-keys.gnupg.net --send-keys 你的公钥
导致mac在部署中也会出现gpg错误的一个原因和7.4是一样的,为了解决这个问题,我们需要在setting中额外配置信息。下面的配置要将自己的私钥密码填写进去,除此之外不需要任何修改。
ossrh
true
gpg2
你的私钥密码
理论上,只要我们在groupId中填写的是自己的域名,整个审批流程是没有被拒绝的理由的。如果一直不能审批通过可能是因为他们的公司在美国和中国有时差,他们的办公时间是我们的晚上,所以请耐心等待。