maven中心倉庫OSSRH使用簡介

flydean發表於2021-04-09

簡介

使用java做專案的朋友肯定對maven不陌生,maven為我們提供了一箇中心倉庫,我們在構建java專案時,直接從maven中心倉庫中下載依賴的jar包到本地,然後打包進行構建。

所有人都知道有這樣一個maven倉庫,但是很少有人去探尋這個maven倉庫到底在什麼地方,能不能釋出自己的jar包到中心倉庫呢?今天給大家介紹一下maven中心倉庫和OSSRH的使用。

為什麼使用中心倉庫

maven中心倉庫的地址是 https://search.maven.org/#browse , 我們可以通過該連結去查詢需要的jar包,而這些jar包都是各個開源組織釋出上去的。

這個中心倉庫是Apache Maven, SBT 預設的repository。同時還可以支援 Apache Ant/Ivy, Gradle 等構建工具的使用。

現在的軟體界是開源的軟體界,越來越多的人和企業願意在網路上貢獻自己的程式碼,於是有了maven社群的中心倉庫,可以方便任何人共享和使用jar包。

釋出到中心倉庫前的準備工作

釋出到中心倉庫是需要許可權的,我們需要註冊我們的專案也就是artifacts id,並且指定需要將專案釋出到哪裡。

Sonatype 提供了一個叫做開源軟體資源庫託管Open Source Software Repository Hosting (OSSRH) 的工具,幫助我們來方便的將專案釋出到中心倉庫中。它是專案所有者和貢獻者將其元件釋出到中央資源庫的主要途徑。

我們需要選擇一個你所擁有的domain作為groupId,對於GitHub groupId(io.github.username),只要您的專案URL與所請求的groupId匹配,就會立即進行驗證。

對於其他的域名,可以通過下面兩種方式之一來進行域名的驗證:

  1. 使用TXT檔案驗證:在域名下建立一個代表OSSRH ticket number的TXT檔案來進行驗證。
  2. GitHub重定向:設定你的域名到託管專案的GitHub URL的重定向。

使用OSSRH

Sonatype OSSRH(OSS儲存庫託管)使用Sonatype Nexus儲存庫管理器為開源專案二進位制檔案提供儲存庫託管服務。 OSSRH使用的是Maven儲存庫格式,我們可以部署開發版本的二進位制檔案snapshots,階段釋出二進位制檔案,還可以升級二進位制檔案並將其同步到中央倉庫中。

使用Sonatype建立ticket

Sonatype使用JIRA來管理建立請求,所以我們需要首先建立一個JIRA賬號,建立賬號地址: https://issues.sonatype.org/secure/Signup!default.jspa , 然後使用該賬戶建立一個Project ticket,建立ticket地址:https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134。

一般來說會在2個工作日內進行稽核。

中央倉庫中的元件要求

不同於我們自己的私人倉庫,中央倉庫中的元件的格式是有一定要求的。我們需要遵循它的格式規範。

提供Javadoc 和原始碼

除了pom檔案之外,還需要提供javadoc檔案和原始碼檔案。這樣的目的是方便在IDE中直接訪問使用。

這些檔案的命名遵循Maven儲存庫格式的命名約定,使用artifactId加上version作為檔名稱,並根據型別使用javadoc或者sources作為名字的區分,以jar結尾,比如:

<groupId>com.example.applications</groupId>
<artifactId>example-application</artifactId>
<version>1.4.7</version>

其對應的javadoc檔案和原始碼檔案如下:

example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar

如果確實沒有javadoc和原始碼檔案,比如Scala專案,那麼需要建立一個假的檔案來通過驗證。

使用GPG/PGP給檔案簽名

所有的檔案都需要使用GPG/PGP進行簽名,生成一個.asc字尾的檔案,比如對應下面的檔案:

example-application-1.4.7.pom
example-application-1.4.7.jar
example-application-1.4.7-sources.jar
example-application-1.4.7-javadoc.jar

需要生成:

example-application-1.4.7.pom.asc
example-application-1.4.7.jar.asc
example-application-1.4.7-sources.jar.asc
example-application-1.4.7-javadoc.jar.asc

Metadata檔案

Metadata檔案也就是需要提交的pom檔案。 這是Apache Maven用來定義專案及其構建的Project Object Model檔案。 使用其他工具進行構建時,必須對其進行組裝並確保其包含下面幾項必須的資訊。

除了必需的資訊外,還建議包含專案的正確依賴關係,以便構建工具可以使用該資訊正確地解決傳遞依賴關係,並且不需要使用者手動管理依賴關係。

  1. 專案座標資訊,也叫做GAV。包括groupId ,artifactId和version,如下所示:
<groupId>com.example.applications</groupId>
<artifactId>example-application</artifactId>
<version>1.4.7</version>

除此之外,如果專案不是jar包,還需要包含packaging資訊,有效的值包括: jar , war ,ear , pom , maven-plugin , ejb , rar , par , aarapklib

  1. 專案名字,描述和URL資訊:
<name>Example Application</name>
<description>A application used as an example on how to set up pushing 
  its components to the Central Repository.</description>
<url>http://www.example.com/example-application</url>

還可以使用變數來構建專案名:

<name>${project.groupId}:${project.artifactId}</name>
  1. License資訊
<licenses>
  <license>
    <name>The Apache License, Version 2.0</name>
    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
  </license>
</licenses>
  1. 開發者資訊
<developers>
    <developer>
      <name>Manfred Moser</name>
      <email>manfred@sonatype.com</email>
      <organization>Sonatype</organization>
      <organizationUrl>http://www.sonatype.com</organizationUrl>
    </developer>
  </developers>
  1. SCM資訊

SCM是你專案的地址,如果使用的svn可以這樣寫:

<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>

如果使用的github可以這樣寫:

<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>

部署

部署的目的是將生成的元件部署到本地的倉庫中,有很多工具可以使用,最常見的就是Apache Maven,其他的構建工具比如Apache ant、Gradle、sbt等都可以很方便的構建專案。

注意,OSSRH單個檔案有上傳大小限制,最大為1024MB。如果需要上傳更大的元件,需要聯絡sonatype。

上傳到中央倉庫

本地部署好之後,就可以上傳到中央倉庫了。

可以使用Nexus Staging Maven Plugin 或者 Ant Tasks 來通過命令列上傳。也可以直接瀏覽器訪問 https://oss.sonatype.org/ 來上傳。

一旦釋出,元件會在10分鐘之內釋出到中央倉庫,並且在2個小時之內,可以從中央倉庫搜尋到。

我們以瀏覽器釋出為例來看一下具體的步驟。

首先使用JIRA建立的使用者名稱和密碼登入到 https://oss.sonatype.org/

登入之後,在左下角可以看到Build Promotion選項,我們選擇Staging Repositories ,就會展示目前處於stage狀態的倉庫。

在部署過程中建立的stage儲存庫會有一個名稱,該名稱以專案的groupId開頭(刪除其中的點),帶有破折號和4位數字。 例如。 如果您的專案groupId為com.example.applications,則staging配置檔名稱將以comexampleapplications開頭。 序列號從1000開始,並且隨著部署的增加而增加,比如:comexampleapplication-1010。

選擇staging儲存庫,列表下方的皮膚將顯示有關儲存庫的更多詳細資訊。 另外,可以點選CloseRelease按鈕。

部署完成後,狀態會變成Open,點選close會觸發對元件的校驗,如果校驗成功,那麼可以點選release按鈕將其部署到中央倉庫中。

如果選擇使用Nexus Staging Maven外掛或Ant任務進行部署,可以直接在命令列進行。

本文已收錄於 http://www.flydean.com/04-maven-ossrh/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章