將jar包發佈到maven中央倉庫

將jar包發佈到maven中央倉庫

最近作了一個swagger-ui的開源項目,由於是採用vue進行解析swagger-json,須要前端支持,爲了後端也能方便的使用此功能,因此將vue項目編譯後的結果打成jar包放到maven中央倉庫供有須要的人進行使用。php

將前端項目打成jar供後端使用還有一個好處就是,一些項目可能沒有設置跨域,將jar與項目一塊兒運行,就是同源訪問,從根源上解決了跨域問題,能夠很方便的使用。前端

申請一個groupId

中央倉庫是不少jar的集合,對於maven的使用標識惟一性的由groupIdartifactIdversion三個要素組成,第一個是咱們對外須要惟一的,後面兩個是咱們本身進行規劃使用,因此上傳中央倉庫最重要的是申請一個groupId,此groupId與你要上傳的jar包的groupId必須一致。vue

註冊帳號

註冊地址:issues.sonatype.org/secure/Sign…java

帳號和密碼,在登錄工單系統和提交時會用到,須要牢記。linux

申請groupId

申請地址 issues.sonatype.org/secure/Dash…git

點擊新建 github

deploy_new

  • 項目:Community Support - Open Source Project Repository Hosting
  • 問題類型:New Project
  • 概要:描述下你要作的事情,儘可能使用英文,可以使用使用有道輔助翻譯一下
  • 描述:可空,能夠隨便寫點你爲何要申請一個groupId
  • Group Id:很是重要,填寫一個惟一的,通常以自有域名好比com.tennetcn.free這種,當前還能夠是github的用戶,能夠填寫com.github.chfree這種。不論填寫哪一種應該都是有相應的驗證規則,我是自有域名,進行了域名的TXT解析驗證
  • Project URL:能夠填寫你開源項目的地址
  • SCM URL:能夠與project url地址同樣
  • Already Synced to Centra:是否準備好同步到中央倉庫,選擇yes的話則會覆蓋以前的構建。

而後點擊新建就能夠了,若是時間湊巧,可能立刻就有人回覆工單,若是是自有域名,則須要進行一下TXT解析驗證。web

切記:在別人回覆了工單,你對工單的相關信息或對域名進行了解析操做,必定進行一下Comment操做,相似告訴當前工單處理人,我已經按你的操做進行了,你在看一下的意思。否則你傻等半天都不會有一下步的工單進度處理。spring

最後成功會有如下回復,且工單狀態會變爲已解決,若是你最後上傳成功了,能夠回來關閉此問題,其實用過jira之類的缺陷管理系統,這點就很好理解了。shell

com.tennetcn.free has been prepared, now user(s) chfree can:

Deploy snapshot artifacts into repository https://oss.sonatype.org/content/repositories/snapshots
Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2
Release staged artifacts into repository 'Releases'
please comment on this ticket when you promoted your first release, thanks
複製代碼

gpg加密處理

它是一種基於密鑰的加密方式,使用了一對密鑰對消息進行加密和解密,來保證消息的安全傳輸。

windowsmaclinux都有相應的使用方式。

windows下分爲如下六步,我以爲是命令行如下六步均可以

  1. 下載安裝GPG環境
    下載地址:www.gpg4win.org/

  2. 檢查是否安裝成功
    打開cmd命令行窗口,輸入

gpg --version
複製代碼

執行後成功輸出gpg版本即爲安裝成功

  1. 生成密鑰
    命令行執行
gpg --gen-key
複製代碼

根據提示輸入用戶名和郵箱以及Passphase,其他信息使用默認便可,Passphase即爲密碼,需記住,後續上傳jar包時要用到

  1. 查看公鑰
    執行
gpg --list-keys
複製代碼

輸出以下信息

/Users/chenghuan/.gnupg/pubring.kbx
--------------------------------------------------------
pub   rsa4096 2020-04-24 [SC] [有效至:2024-04-24]
      29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
uid           [ 絕對 ] chfree <chfree365@qq.com>
sub   rsa4096 2020-04-24 [E] [有效至:2024-04-24]
複製代碼

其中的十六進制串29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80即爲生成的公鑰id

  1. 發佈公鑰 執行
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
複製代碼

將公鑰發佈到PGP密鑰服務器後,即可以使用本地的私鑰來對上傳構件進行數字簽名,而下載該構件的用戶可經過上傳的公鑰來驗證簽名,也就是說,你們能夠驗證這個構件是否由本人上傳的,由於有可能該構件被壞人給篡改了。

  1. 驗證是否發佈成功
    執行
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
複製代碼

成功輸出gpg密鑰信息即爲發佈成功

我是用的mac上的一個GPG Keychain,下載地址爲gpgtools.org/更傻瓜式的界面操做。

項目打包上傳

須要將項目打成jar包上傳到中央倉庫,在打jar包的過程當中就須要用到咱們gpg生成的祕鑰信息,固然最主要的仍是配置pom文件

配置setting.xml

setting中,主要配置咱們第一步中註冊的帳戶和密碼,由於setting.xml是本地的,而pom.xml是要上傳到源碼服務器中,因此是在setting.xml中。

能夠找到ide對應的maven配置項,當前ide對應的setting.xml在哪一個路徑,若是沒有配置,能夠下載一個apache-maven的包,解壓后里面有setting.xml進行配置

setting.xml中配置以下:

<server>
  <id>maven_nexus_repo</id>
  <username>username</username>
  <password>password</password>
</server>
複製代碼

這個id在後面配置pom.xml的時候還會用到,在進行deploy操做的時候,就是根據id名稱從這個setting.xml中提取用戶名和密碼進行上傳權限驗證。

配置pom.xml

相關的xml配置及上傳會驗證的doc jarsource jar的插件配置包,都已經貼到下面,須要注意的是licensesdevelopersscm幾個節點在編譯及上傳過程不須要,可是在發佈構建的時候,會進行檢查,沒有就會檢查不經過,因此仍是一開始就補全好點。

上傳就很簡單,直接mvn deploy便可,若是是idea,在maven的工具欄,選擇相應的項目進行deploy操做便可

注意:若是在編譯的過程當中下載不到相關的jar包,你要看下,下載jar是在哪一個地址下載,若是是repo1.maven.org這個中央倉庫,就要注意是http仍是https,發現是http那就要修改下setting.xml中的倉庫連接裏面的httphttps,由於maven.org已經不支持http了。

<modelVersion>4.0.0</modelVersion>
<groupId>com.tennetcn.free</groupId>
<artifactId>think-swagger-ui-starter</artifactId>
<packaging>jar</packaging>
<version>0.0.4</version>
<description>swagger-ui</description>
<url>https://github.com/chfree/think-free-base</url>

<licenses>
    <!-- MIT許可證 -->
    <license>
        <name>MIT License</name>
        <url>http://www.opensource.org/licenses/mit-license.php</url>
    </license>
    <!-- Apache許可證 -->
    <!-- <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>chfree</name>
        <email>chfree365@qq.com</email>
        <url>http://www.tennetcn.com</url>
    </developer>
</developers>

<scm>
    <tag>master</tag>
    <connection>https://github.com/chfree/think-free-base</connection>
    <developerConnection>https://github.com/chfree</developerConnection>
    <url>https://github.com/chfree/think-free-base/tree/master/think-swagger-ui-starter</url>
</scm>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>1.6</version>
    </dependency>
</dependencies>

<profiles>
    <profile>
        <id>ossrh</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <!-- 要生成Javadoc和Source jar文件,您必須配置javadoc和源Maven插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-source-plugin</artifactId>
                    <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>
                    <executions>
                        <execution>
                            <id>attach-javadocs</id>
                            <goals>
                                <goal>jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <!-- 必須配置GPG插件用於使用如下配置對組件進行簽名 -->
                <!-- GPG -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-gpg-plugin</artifactId>
                    <version>1.6</version>
                    <executions>
                        <execution>
                            <phase>verify</phase>
                            <goals>
                                <goal>sign</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
        <distributionManagement>
            <snapshotRepository>
                <!-- 這個id須要在setting.xml中設置 -->
                <id>maven_nexus_repo</id>
                <name>maven_nexus_repo</name>
                <!-- 這裏的url就是Issue中回覆的snapshots 的repo地址-->
                <url>https://oss.sonatype.org/content/repositories/snapshots</url>
            </snapshotRepository>
            <repository>
                <id>maven_nexus_repo</id>
                <name>maven_nexus_repo</name>
                <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
            </repository>
        </distributionManagement>
    </profile>
</profiles>
複製代碼

構件倉庫操做

當全部的上傳操做處理完,就須要登陸到構建發佈地址,由於如今全部的操做都是將咱們的jar包發佈到了緩存倉庫,須要進行後續操做纔是發佈到正式倉庫,不然在search.maven.org中怎麼都是搜索不到的。

構建發佈地址:oss.sonatype.org/#welcome

用戶名和密碼就是第一步中申請的的用戶名和密碼。

登錄後在左邊有一些菜單,在Staging Respositories下就能看到咱們上次的緩存jar列表,勾選對應的數據,點擊上面工具欄的close,先關閉緩存狀態。等待一下子,刷新當前記錄,記錄不是open後,就能夠勾選點擊release

若是上傳的jar不符合規範,通常是pom中不規範或是沒有doc jar,source jar等狀況,及會在close的時候會提示出相關異常,咱們只須要解決相關異常便可從新上傳,此時是不須要改版本號。

當你進行了release後,你的註冊帳號的郵箱就會收到一封郵件,告訴你發佈成功了,可是在search.maven.org中搜索到還須要2小時左右。但你基本就能夠經過pom來下載你的jar了。

相關文章
相關標籤/搜索