組件發佈到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
複製代碼
相關文章
相關標籤/搜索