如何使用maven打包并发布到中央服务器

在前一篇的博文中,我们介绍了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等)

新增信息1

新增信息2

这里注意了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的时候,就可以进行下一步的操作了。

状态

注意:当你使用了某个域名后,比如net.anumbrella,则你下次使用时就不用再提交工单了,net.anumbrella.*的子域名都可以直接打包进行提交到中央库。

二、生成密匙对

这里需要使用gpg来生成密匙对,如果是windows,这需要下载gpg4win,安装好就可以使用。下载地址
本文使用的mac环境,所以使用brew来安装gpg,如果对brew不太熟悉,可以看一下我原来的博文——Homebrew学习及mac下升级php7问题
使用命令安装gpg,

brew install gpg

安装好后使用gpg –version查看,gpg是否成功。

brew –version

brew安装

安装完gpg后,就执行

gpg –gen-key

这里是采集密匙,输入用户名和邮箱,其他的值可以使用默认值,然后输入Passphrase的值,这个值需要记住,这个相当于密钥的密码,发布过程中进行签名操作的时候会用到。

Passphrase

查看公匙命令:

gpg –list-keys

公匙

到这里生成密匙的操作就完成了。

三、设置Maven配置

在项目的pom.xml文件中,加入如下配置:

  <parent>
    <groupId>org.sonatype.oss</groupId>
    <artifactId>oss-parent</artifactId>
    <version>7</version>
  </parent>

以及下面的配置,包括执照、scm和developers,

  <licenses>
    <license>
      <name>The Apache Software License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <scm>
    <url>https://github.com/Shuyun123/seaweedfs-java-client</url>
    <connection>[email protected]:Shuyun123/seaweedfs-java-client.git</connection>
    <developerConnection>http://www.anumbrella.net</developerConnection>
  </scm>

  <developers>
    <developer>
      <name>anumbrella</name>
      <email>[email protected]</email>
      <url>http://www.anumbrella.net</url>
    </developer>
  </developers>

scm主要是项目地址,而developers则是开发者的相关信息。同时需要在pom.xml文件的build下加入maven插件配置如下:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <!--配置生成源码包-->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.0.1</version>
        <executions>
          <execution>
            <id>attach-sources</id>
            <goals>
              <goal>jar</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

配置好项目的pom.xml文件后,然后就对Maven的settings.xml文件进行配置,在settings.xml文件中加入下面的配置:

<servers>
  <server>
    <id>sonatype-nexus-snapshots</id>
    <username>Sonatype网站的账号</username>
    <password>Sonatype网站的密码</password>
  </server>
  <server>
    <id>sonatype-nexus-staging</id>
    <username>Sonatype网站的账号</username>
    <password>Sonatype网站的密码</password>
  </server>
</servers>

username和password就是在Sonatype上注册的用户名和密码。

四、部署和发布Jar包

在配置好文件后,切换目录到项目的pom.xml目录下,然后执行如下命令:

mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=配置gpg的密匙密码"

接着如果没出现错误就忽略该步骤继续执行,作者出现了如下错误:
gpg签名

就是
gpg: 签名时失败: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device

gpg配置

需要在~/.gnupg目录下,新建文件gpg.conf和gpg-agent.conf,如果没有该文件就新建一个。同时在gpg.conf下添加如下代码:

use-agent
pinentry-mode loopback

在gpg-agent.conf下添加如下代码:

allow-loopback-pinentry

然后再重新执行上面的步骤,执行中还是要再输入passphrase密码,就是gpg密匙密码。如果没问题就可以得到后面的结果,如下:
result

如果还有报错,可以执行

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包。
查找jar

然后依次点击上方的Close–>Confirm,这将会弹出类似于下面的对话框,在其中输入我们Jar包的描述信息,这个信息将会在Maven搜索结果当作简介介绍我们Jar包的,所以建议输的详细点。

close

当状态变成closed后,执行上方的Release–>Confirm,同样会弹出一个类似于上面的对话框,我们还是输入那些介绍信息即可,

Release

当这步执行完之后,构件将会自动删除,我们可以在welcome查看文件
查找

并经过几小时后便可以在Maven中央仓库搜索到(https://search.maven.org)。

search

我们也可以在http://repo1.maven.org/maven2/中找到具体的项目目录地址。

目录

五、更新Jar包

当我们要更改了代码后,要升级版本,我们只需要更新项目工程代码,并修改pom.xml文件里面的版本号,最后重新执行上面的部署和发布Jar包步骤即可。

猜你喜欢

转载自blog.csdn.net/anumbrella/article/details/78887195