组件发布到Maven中央仓库过程

概述

  最近发布了本身的项目到maven中央仓库、经过文章记录一下,第一方便本身,第二帮助他人,我想看这篇文章的同窗确定必定用过maven来构建项目,而且可能用过maven私服,上传maven中央仓库的原由是由于本身编写了一个脚手架,涉及到一部分和业务无关代码,想着是作个模块放到项目里好仍是独立出来玩好呢,后来一想,为了让你们专一业务,仍是分离出来,并打包上传到maven中央仓库吧。在刚学习maven的时候知道了仓库这个概念、本地、私服、云端。好久一来,都是玩本地,后来玩私服,这不也玩起中央仓库了,那就分享一下经验吧,分享的时候我尽力作到调理、清晰、让你们都看得懂,少走弯路。php

要求

  • 只能将发行版上传到中央存储库
  • 具备java doc和代码源文件
  • 使用GPG/PGP签名文件
  • 足够的源数据信息

步骤

准备pom

坐标(GAV)

  • groupId:以反向域名开头的项目的顶级名称空间级别
  • artifactId:组件的惟一名称
  • version:组件的版本字符串,版本能够是任意字符串,但不能以结尾-SNAPSHOT,由于这是用于标识当前正在开发的版本的保留字符串。强烈建议使用[语义版本控制](semver.org)帮助您的用户选择版本。
<groupId>cn.smallbun.scaffold</groupId>
<artifactId>scaffold-framework</artifactId>
<version>1.0.0</version> 
复制代码

项目名称,描述和URL

有关项目的一些人可读的信息和指向你的项目的网站获取更多,咱们须要的存在name,description和url 。html

<name>smallbun-scaffold-framework</name>
<description>smallbun企业级开发脚手架-核心框架</description>
<url>http://www.smallbun.cn</url> 
复制代码

一种常见且可接受的名称惯例是使用Maven属性从坐标中将其组装起来:前端

<name>${project.groupId}:${project.artifactId}</name>
复制代码

许可证信息

须要声明用于分发组件的许可证java

<!--Apache-->
  <licenses>
    <license>
      <name>The Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
    </license>
  </licenses>
 <!--OR MIT-->
  <licenses>
      <license>
        <name>MIT License</name>
        <url>http://www.opensource.org/licenses/mit-license.php</url>
      </license>
  </licenses>
复制代码

开发者信息

为了可以关联项目,须要添加一个开发人员部分。git

<!--开发人员信息-->
<developers>
    <developer>
        <name>zuoqinggang</name>
        <email>qinggang.zuo@gmail.com</email>
        <url>https://www.pingfangushi.com</url>
    </developer>
</developers>
复制代码

SCM 信息

与源代码管理系统的链接是一个必需的元素。使用的语法取决于使用的版本控制系统。github

  • connection详细说明只读链接。
  • developerConnection详细说明读取和写入访问链接详细信息。
  • url包含了一个Web前端,您的SCM系统的URL

Maven SCM文档中提供了有关各类受支持格式的详细信息,并提供了许多常见示例。 subversionshell

<scm>
  <connection>scm:svn:http://subversion.example.com/svn/project/trunk/</connection>
  <developerConnection>scm:svn:https://subversion.example.com/svn/project/trunk/</developerConnection>
  <url>http://subversion.example.com/svn/project/trunk/</url>
</scm>
复制代码

githubapache

<scm>
  <connection>scm:git:git://github.com/simpligility/ossrh-demo.git</connection>
  <developerConnection>scm:git:ssh://github.com:simpligility/ossrh-demo.git</developerConnection>
  <url>http://github.com/simpligility/ossrh-demo/tree/master</url>
</scm>
复制代码

BitBucket服务器

<scm>
  <connection>scm:git:git://bitbucket.org/simpligility/ossrh-pipeline-demo.git</connection>
  <developerConnection>scm:git:ssh://bitbucket.org:simpligility/ossrh-pipeline-demo.git</developerConnection>
  <url>https://bitbucket.org/simpligility/ossrh-pipeline-demo/src</url>
</scm>
复制代码

BitBucket上的Mercurial框架

<scm>
  <connection>scm:hg:http://bitbucket.org/juven/hg-demo</connection>
  <developerConnection>scm:hg:https://bitbucket.org/juven/hg-demo</developerConnection>
  <url>http://bitbucket.org/juven/hg-demo</url>
</scm>
复制代码

Apache Maven的Apache Git服务器上的Git

<scm>
  <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
  <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
  <url>https://github.com/apache/maven/tree/${project.scm.tag}</url>
  <tag>master</tag>
</scm>
复制代码

完整的pom信息

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.smallbun.scaffold</groupId>
  <artifactId>scaffold-framework</artifactId>
  <version>1.0.0</version> 
  <packaging>jar</packaging>

  <name>smallbun-scaffold-framework</name>
  <description>smallbun企业级开发脚手架-核心框架</description>
  <url>http://www.smallbun.cn</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>zuoqinggang</name>
          <email>qinggang.zuo@gmail.com</email>
          <url>https://www.pingfangushi.com</url>
      </developer>
  </developers>

  <scm>
      <connection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git</connection>
      <developerConnection>scm:git:git@github.com:pingfangushi/smallbun-scaffold-framework.git
      </developerConnection>
      <url>http://github.com/pingfangushi/smallbun-scaffold-framework/tree/master</url>
  </scm>
...

</project>
复制代码

Java doc和源代码

要生成Javadoc和Source jar文件,您必须配置javadoc和Source Maven插件。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>2.2.1</version>
      <executions>
        <execution>
          <id>attach-sources</id>
          <goals>
            <goal>jar-no-fork</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>2.9.1</version>
      <executions>
        <execution>
          <id>attach-javadocs</id>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
复制代码

GPG签名

  为了提升中央存储库的质量,maven中央仓库要求工件(除校验和以外的全部文件)提供PGP签名,并将公共密钥分发到诸如pgp.mit.edu的密钥服务器。

安装GnuPG

  从www.gnupg.org/download/下载GPG或使用您喜欢的软件包管理器进行安装,而后经过运行gpg --version命令进行验证。

注:在某些系统上,将使用较新的gpg2:gpg2 --version

生成密钥对

密钥对使咱们可使用GPG对工件进行签名,而后用户能够验证工件是否已由咱们签名。执行命令根据提示提供用户名、邮箱,密码信息。

gpg --gen-key
复制代码

列出秘钥

gpg --list-keys
复制代码

列出可使用的私钥

gpg --list-secret-keys
复制代码

输出中pub一行'/'后的8位HEX字符串就是密钥ID

上传到服务器

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <密钥ID>
复制代码

--keyserver参数标识目标密钥服务器地址,并使用--SEND-keys 是要分发密钥的keyid的。您能够经过gpg --list-secret-keys来获取密钥ID。一旦提交给密钥服务器,公钥将同步到其余密钥服务器。

pom配置

Maven GPG插件用于经过如下配置对组件进行签名。

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-gpg-plugin</artifactId>
      <version>1.5</version>
      <executions>
        <execution>
          <id>sign-artifacts</id>
          <phase>verify</phase>
          <goals>
            <goal>sign</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
复制代码

上传仓库

提交 issues

首先你须要有一个帐户:点击注册 而后建立问题项:建立问题

在未收到以解决的电子邮件以前,请不要进行部署 提交问题不困难,这里不截图讲了,若是使用域名,须要配置解析到问题URL,将会自动验证,正常状况下,白天提交,次日早上就能够收到回复了。

配置身份验证

打开maven setting.xml文件配置加入以下内容

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>用户名</username>
      <password>密码</password>
    </server>
  </servers>
</settings>
复制代码

pom配置

因为OSSRH始终运行最新版本的Sonatype Nexus Repository Manager,所以最好使用Nexus Staging Maven插件的最新版本。

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
</distributionManagement>
<build>
  <plugins>
    <plugin>
      <groupId>org.sonatype.plugins</groupId>
      <artifactId>nexus-staging-maven-plugin</artifactId>
      <version>1.6.7</version>
      <extensions>true</extensions>
      <configuration>
        <serverId>ossrh</serverId>
        <nexusUrl>https://oss.sonatype.org/</nexusUrl>
        <autoReleaseAfterClose>true</autoReleaseAfterClose>
      </configuration>
    </plugin>
    ...
  </plugins>
</build>
复制代码

或者,若是想使用Maven部署插件(默认),则须要添加完整的distributionManagement

<distributionManagement>
  <snapshotRepository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </snapshotRepository>
  <repository>
    <id>ossrh</id>
    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
</distributionManagement>
复制代码

推荐使用nexus-staging-maven-plugin发布

注:settings.xml server元素中的id元素与snapshotRepositoryand 元素中的repository元素以及serverIdNexus Staging Maven插件的配置如何相同

发布

若是版本是发行版(不要以-SNAPSHOT结尾),执行deploy就能够了。

mvn clean deploy
复制代码
相关文章
相关标签/搜索