1. 程式人生 > 實用技巧 >將自己的 jar 包釋出到 maven 中央倉庫

將自己的 jar 包釋出到 maven 中央倉庫

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

註冊

首先到sonatype官網進行註冊!

找到註冊“sign up”,如圖,進行註冊!

175050_plNF_2919251.png

登入

登入後,在頁面上方點選“create”進行建立 issue。

獲得如下圖所示。

175120_RUfe_2919251.png

  • Summary:寫你想做什麼,你的包的功能。簡單概述,要短一點。
  • Description:可以直接複製 summary,然後加一點描述資訊。
  • Group Id :推薦寫 github。例如我的是 io.github.dslzc ,很快能通過,自己域名的話我沒試過,雖然我有自己的域名。
  • Project UR : 你的專案的描述,填寫你的專案的 github 地址就可以了。
  • SCM url: 有填寫說明的,如https://github.com/DSLZC/dslcode-common-utils.git。
  • Username(s):邀請其他人有許可權一起完成這個專案。我當時沒填。

等待 Issue 審批通過

網上說需要一天到兩天。為何我這一步是秒過的。大概 20 秒過後我就接收到通過郵件了。或許是我填寫的 github 比較好認真真實性。

配置 GPG

如果是 Windows 作業系統,需要下載 Gpg4win 軟體來生成金鑰對。建議大家下載 Gpg4win-Vanilla 版本,因為它僅包括 GnuPG,這個工具才是我們所需要的。

安裝 GPG 軟體後,開啟命令列視窗,依次做以下操作:

  1. 檢視是否安裝成功

gpg --version

能夠顯示 GPG 的版本資訊,說明安裝成功了。

  1. 生成金鑰對

gpg --gen-key

此時需要輸入姓名、郵箱等欄位,其它欄位可使用預設值,此外,還需要輸入一個 Passphase,相當於一個金鑰庫的密碼,一定不要忘了,也不要告訴別人,最好記下來,因為後面會用到。

  1. 檢視公鑰

gpg --list-keys

如下:

D:\IdeaProjects\ScriptSpider>gpg --list-keys
pub  rsa2048 2018-01-10 [SC] [expires: 2020-01-10]
   E7135ADD7985270EC66E0B2F735A5D90291062B9
uid      [ultimate] dongsilin <
[email protected]
> sub rsa2048 2018-01-10 [E] [expires: 2020-01-10]

我的公鑰是:E7135ADD7985270EC66E0B2F735A5D90291062B9

  1. 將公鑰釋出到 PGP 金鑰伺服器

gpg --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys E7135ADD7985270EC66E0B2F735A5D90291062B9

此後,可使用本地的私鑰來對上傳構件進行數字簽名,而下載該構件的使用者可通過上傳的公鑰來驗證簽名,也就是說,大家可以驗證這個構件是否由本人上傳的,因為有可能該構件被壞人給篡改了。

  1. 查詢公鑰是否釋出成功

gpg --keyserver hkp://pool.sks-keyservers.net:11371 --recv-keys E7135ADD7985270EC66E0B2F735A5D90291062B9

實際上就是從 key server 上通過公鑰 ID 來接收公鑰,此外,也可以到 sks-keyservers.net 上通過公鑰 ID 去查詢。

修改 Maven 配置檔案

...     
 <servers>     
     <server>         
     <id>dslcode</id>  // 這裡要和後面呼應        
     <username>dslcode</username>// 登入sonatype的使用者名稱         
     <password>**********************</password>   // 登入sonatype的密碼   
     </server>   
 </servers>     
 ...

修改你工程的 pom 檔案

你可以增加你自己其他的,這個是我當時的 pom。

<groupId>io.github.dslzc</groupId>
   <artifactId>dslcode.common.utils</artifactId>
   <version>0.0.1</version>
   <packaging>jar</packaging>

   <name>Java-Common-Utils</name>
   <description>我的常用工具包 Java Common Utils</description>
   <url>https://github.com/DSLZC/dslcode-common-utils</url>

   <licenses>
      <license>
         <name>The MIT License (MIT)</name>
         <url>http://www.opensource.org/licenses/mit-license.html</url>
         <distribution>repo</distribution>
      </license>
   </licenses>

   <developers>
      <developer>
         <name>****</name>
         <email>****@foxmail.com</email>
      </developer>
   </developers>

   <scm>
      <connection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</connection>
      <developerConnection>scm:git:https://github.com/DSLZC/dslcode-common-utils.git</developerConnection>
      <url>https://github.com/DSLZC/dslcode-common-utils</url>
   </scm>

   <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>

      <spring.version>4.3.3.RELEASE</spring.version>
      <aspectj.version>1.8.9</aspectj.version>
      <servlet.version>3.1.0</servlet.version>
      <javax.validation.version>1.1.0.Final</javax.validation.version>
      <fasterxml.version>2.8.1</fasterxml.version>
      <commons.io.version>2.4</commons.io.version>
      <dom4j.version>1.6.1</dom4j.version>
      <dozer.version>5.5.1</dozer.version>
      <lombok.version>1.16.10</lombok.version>
      <joda.time.version>2.9.4</joda.time.version>
      <apache.poi.version>3.14</apache.poi.version>
      <thumbnailator.version>0.4.8</thumbnailator.version>
   </properties>

   <dependencies>
      ************
   </dependencies>

   <build>
      <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <addMavenDescriptor>true</addMavenDescriptor>
                        <index>true</index>
                        <manifest>
                            <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>2.10.1</version>
                <executions>
                    <execution>
                        <id>attach-javadoc</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                  <configuration>
                     <additionalparam>-Xdoclint:none</additionalparam>
                  </configuration>
               </execution>
                </executions>
                <configuration>
                    <show>public</show>
                    <charset>UTF-8</charset>
                    <encoding>UTF-8</encoding>
                    <docencoding>UTF-8</docencoding>
                    <failOnError>false</failOnError>
                    <!--<excludePackageNames>com.dslcode.*</excludePackageNames>-->
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-gpg-plugin</artifactId>
                <executions>
                    <execution>
                        <id>sign-artifacts</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
      </plugins>
   </build>

    <distributionManagement>
        <snapshotRepository>
            <id>dslcode</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
        </snapshotRepository>
        <repository>
            <id>dslcode</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
    </distributionManagement>

</project>

上傳構件到 OSS 中

mvn clean deploy -Dmaven.test.skip=true -Dgpg.passphrase=************

有時候會彈出來讓你輸入Passphase 密碼,Passphase 就是 GPG 金鑰對的密碼,只有自己才知道。在之前的步驟中已經告訴你要牢記了。

隨後會看到大量的 upload 資訊,而且速度比較慢,如果出現 timeout,需要反覆嘗試。

在 OSS 中釋出構件

開啟https://oss.sonatype.org,使用自己的 Sonatype 賬號登入後,點選左側的 Staging Repositories ,在最下方可以看到剛才已上傳的構件,或者搜尋自己的構件。

這些構件目前是放在 Staging 倉庫中,可進行模糊查詢,快速定位到自己的構件。

此時,該構件的狀態為 Open,需要勾選它,然後點選 Close 按鈕。

141710_Bhs6_2919251.png

接下來系統會自動驗證該構件是否滿足指定要求,當驗證完畢後,狀態會變為 Closed。

141725_GkzR_2919251.png

如果檢查出現問題,會有詳細的記錄,需要把改構件Drop,解決問題後再重新deploy。

142023_d9Wm_2919251.png

最後,點選 Release 按鈕來發布該構件。

142032_hbqM_2919251.png

通知 Sonatype“構件已成功釋出”

需要在曾經建立的 Issue 下面回覆一條“構件已成功釋出”(Hi,my component has been successfully published.thanks!)的評論,這是為了通知 Sonatype 的工作人員為需要釋出的構件做審批,釋出後工作人員會關閉該 Issue。

我的 issue 展示

通過該截圖,你應該知道我們都做了什麼。

142722_hvbs_2919251.png

如果是釋出的話,請注意 artifactId 不能是 -SNAPSHOT

因為從截圖看(經過證明),一旦你的 issue 第一次被批准,你就可以釋出-SNAPSHOT了,而且我當時嘗試了使用我的-SNAPSHOT版本的 jar,並不需要進行後續操作。

等待構件審批通過

沒錯,還是要等,我大概等了一個多小時吧。看我的郵件列表的回覆。意思大概是 10 分鐘就可以使用了,2 小時才能被搜尋到。我猜用映象的應該更慢,需要同步的。感覺他們的效率還是很高,沒有我查到的別人用一到兩天。

最後,就可以到中央倉庫中搜索到自己釋出的構件了!中央倉庫搜尋網站:http://search.maven.org/

143202_vfz4_2919251.png

第一次之後

你就可以安心的開車了 ~

以後的釋出流程是:

  1. 構件準備好之後,在命令列上傳構建

  2. https://oss.sonatype.org/“close”並“release”構件

  3. 等待同步好(大約 2 小時多)之後,就可以使用了。

OK,準備下車啦!!!!!!!

轉載於:https://my.oschina.net/dslcode/blog/1605264