在前一篇的博文中,我们介绍了maven的相关知识,对于maven的认识有了一定的了解,如果还不太熟悉,可以去看一下maven知识快速入门,了解开发中maven常用知识。
今天我们介绍一下maven打包相关的知识点,平时我们使用的大多数类库,就是在maven的中央服务器上面,如果我们要把自己的包,发布到中央服务器,让大家都可以使用。这就需要使用到打包的相关知识点,接下我们就进入正题。
打包到中央服务器主要分为以下的步骤,
- 创建工单
- 生成密匙对
- 设置Maven配置
- 部署和发布Jar包
- 更新Jar包
我们需要在Sonatype网站上提交一个工单,首先去https://issues.sonatype.org/secure/Dashboard.jspa网站创建一个工单(Issues),如果没有账号就去注册一个账号,后面会用到用户名和密码。
登录系统后,点击导航上面的Create按钮,创建一个工单。如图:
填写详细的信息,在新增信息中有Project和Issue Type选项,这个就按默认的选择,Community Support - Open Source Project Repository Hosting (OSSRH)以及New Project。主要是指项目的支持更新方式和工单的类型,其次就选择Summary、Description、Group Id、Project URL、SCM url 等信息,这里主要是填写Jar包的大致摘要、描述、项目或者组织的唯一标志、工程的地址、管理工程的系统(比如git、svn等)
这里注意了Group Id这个一般是网址的地址,信息完成后,点击Create按钮,提交工单后,过一会就会有Sonatype系统会询问你地址是否是你的,这里需要去回答一下,这样一般2个小时就会通过了。可以参考一下我原来的工单https://issues.sonatype.org/browse/OSSRH-36043,回复一下
Hi,Thank you for your reply. xxx.xxx is my blog and I own the domain.
这里的xxx.xxx更改为上面的Group Id,就是指你的网址,也就是项目的父级地址。如果没有个人的网址,可以使用com.github.username。使用github上面的网址,username换为你自己的名称即可。
当你的工单的状态为RESOLVED的时候,就可以进行下一步的操作了。
这里需要使用gpg来生成密匙对,如果是windows,这需要下载gpg4win,安装好就可以使用。下载地址
本文使用的mac环境,所以使用brew来安装gpg,如果对brew不太熟悉,可以看一下我原来的博文——Homebrew学习及mac下升级php7问题。
使用命令安装gpg,
brew install gpg
安装好后使用gpg –version查看,gpg是否成功。
brew –version
安装完gpg后,就执行
gpg –gen-key
这里是采集密匙,输入用户名和邮箱,其他的值可以使用默认值,然后输入Passphrase的值,这个值需要记住,这个相当于密钥的密码,发布过程中进行签名操作的时候会用到。
查看公匙命令:
gpg –list-keys
到这里生成密匙的操作就完成了。
在项目的pom.xml文件中,加入如下配置:
<parent>
<groupId>org.sonatype.ossgroupId>
<artifactId>oss-parentartifactId>
<version>7version>
parent>
以及下面的配置,包括执照、scm和developers,
<licenses>
<license>
<name>The Apache Software License, Version 2.0name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txturl>
<distribution>repodistribution>
license>
licenses>
<scm>
<url>https://github.com/Shuyun123/seaweedfs-java-clienturl>
<connection>[email protected]:Shuyun123/seaweedfs-java-client.gitconnection>
<developerConnection>http://www.anumbrella.netdeveloperConnection>
scm>
<developers>
<developer>
<name>anumbrellaname>
<email>[email protected]email>
<url>http://www.anumbrella.neturl>
developer>
developers>
scm主要是项目地址,而developers则是开发者的相关信息。同时需要在pom.xml文件的build下加入maven插件配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.6.2version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>3.0.1version>
<executions>
<execution>
<id>attach-sourcesid>
<goals>
<goal>jargoal>
goals>
execution>
executions>
plugin>
plugins>
build>
配置好项目的pom.xml文件后,然后就对Maven的settings.xml文件进行配置,在settings.xml文件中加入下面的配置:
<servers>
<server>
<id>sonatype-nexus-snapshotsid>
<username>Sonatype网站的账号username>
<password>Sonatype网站的密码password>
server>
<server>
<id>sonatype-nexus-stagingid>
<username>Sonatype网站的账号username>
<password>Sonatype网站的密码password>
server>
servers>
username和password就是在Sonatype上注册的用户名和密码。
在配置好文件后,切换目录到项目的pom.xml目录下,然后执行如下命令:
mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=配置gpg的密匙密码"
接着如果没出现错误就忽略该步骤继续执行,作者出现了如下错误:
就是
gpg: 签名时失败: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device
需要在~/.gnupg目录下,新建文件gpg.conf和gpg-agent.conf,如果没有该文件就新建一个。同时在gpg.conf下添加如下代码:
use-agent
pinentry-mode loopback
在gpg-agent.conf下添加如下代码:
allow-loopback-pinentry
然后再重新执行上面的步骤,执行中还是要再输入passphrase密码,就是gpg密匙密码。如果没问题就可以得到后面的结果,如下:
如果还有报错,可以执行
mvn help:effective-settings
用查看了下当前生效的settings.xml文件内容,再分析一些问题所在。
将公钥发布到PGP密钥服务器,可使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。
执行gpg –list-keys可以查看公匙,
这里我的公匙就是C7FB53397……….这一大串字符,然后执行发布上传命令:
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys C7FB53397292F51E9F6B809E3932B9FD84D90589
发布Jar包
登录https://oss.sonatype.org/#stagingRepositories系统,输入Sonatype的账号和密码,然后查看提交上去的Jar包。
然后依次点击上方的Close–>Confirm,这将会弹出类似于下面的对话框,在其中输入我们Jar包的描述信息,这个信息将会在Maven搜索结果当作简介介绍我们Jar包的,所以建议输的详细点。
当状态变成closed后,执行上方的Release–>Confirm,同样会弹出一个类似于上面的对话框,我们还是输入那些介绍信息即可,
当这步执行完之后,构件将会自动删除,我们可以在welcome查看文件
并经过几小时后便可以在Maven中央仓库搜索到(https://search.maven.org)。
我们也可以在http://repo1.maven.org/maven2/中找到具体的项目目录地址。
当我们要更改了代码后,要升级版本,我们只需要更新项目工程代码,并修改pom.xml文件里面的版本号,最后重新执行上面的部署和发布Jar包步骤即可。