在 Java 開發中,管理專案構建產物版本是不可或缺的一環。本文將引導你使用 Nexus 倉函式庫來儲存和管理 Java API 的 JAR 檔案,並示範如何透過 Maven 將專案建置產物自動發布到 Nexus 倉函式庫。此流程能有效地控管 API 版本,方便團隊協作和後續佈署。透過整合 Maven 與 Nexus,開發者可以簡化發布流程,確保構建產物的一致性和可靠性,提升整體開發效率。

整合Maven與Nexus倉函式庫並建立自由式工作以發布Java API

瞭解Nexus倉函式庫

在前一節中,我們學習了Git版本控制系統。現在,讓我們來探討一下Nexus倉函式庫,這是一種用於儲存軟體構建產物的倉函式庫。

什麼是構建產物?

構建產物是指在軟體構建過程中生成的檔案,例如,當你構建一個Web應用程式時,生成的WAR檔案就是一個構建產物。在Java API專案中,你會將實作封裝成JAR檔案,這也是構建產物的一種。

什麼是Nexus倉函式庫?

當你為計算器API新增功能時,Git會記錄不同版本的原始碼。但是,除了原始碼版本控制外,你還需要一個系統來管理不同版本的構建產物。Nexus倉函式庫就是這樣的一個系統,它提供了一個平臺讓你可以發布構建產物,並讓使用者從中下載所需的版本。

安裝Nexus倉函式庫

要安裝Nexus倉函式庫,你可以從Sonatype官方網站下載Nexus倉函式庫的ZIP包。然後,解壓縮到你係統上的某個位置,例如,D:\NexusRepository

解壓縮後,你會看到以下幾個目錄:

  • nexus-3.30.1-01:包含Nexus系統相關的檔案,例如,bin目錄下的Nexus.exe可以用來啟動Nexus系統。
  • sonatype-work:包含不同構建產物倉函式庫的資料,用於管理不同版本的構建產物。

啟動Nexus倉函式庫系統

要啟動Nexus倉函式庫系統,你需要設定啟動的IP地址和埠號。你可以在etc目錄下的nexus-default.properties檔案中設定這些引數。

例如,你可以將application-port設為8081,並將application-host設為你想要啟動Nexus伺服器的機器IP地址。儲存更改後,你就可以啟動Nexus系統了。

設定Nexus倉函式庫

啟動Nexus倉函式庫系統後,你需要設定倉函式庫的基本資訊,例如,倉函式庫名稱、描述等。然後,你就可以建立新的構建產物倉函式庫,用於管理你的Java API專案的不同版本。

建立自由式工作以發布Java API

要發布Java API,你需要建立一個自由式工作(Freestyle Job)。這個工作會將你的Java API專案封裝成JAR檔案,並將其發布到Nexus倉函式庫中。

建立自由式工作

你可以在Jenkins中建立一個新的自由式工作。然後,組態工作的基本資訊,例如,工作名稱、描述等。

組態Maven任務

在工作中,你需要組態Maven任務,以便將你的Java API專案封裝成JAR檔案。你可以在工作的組態頁面中新增一個Maven任務,並設定相關的引數,例如,Maven目標、pom檔案路徑等。

組態Nexus倉函式庫發布

然後,你需要組態Nexus倉函式庫發布。你可以在工作的組態頁面中新增一個Nexus倉函式庫發布任務,並設定相關的引數,例如,倉函式庫URL、憑證等。

執行工作

組態完成後,你就可以執行工作了。工作會將你的Java API專案封裝成JAR檔案,並將其發布到Nexus倉函式庫中。

整合Maven與Nexus倉函式庫並建立自由式工作以在Nexus倉函式庫中發布Java API

啟動Nexus伺服器

首先,需要啟動Nexus伺服器。開啟命令提示符,切換到Nexus安裝目錄下的bin目錄。然後,執行Nexus.exe /run命令啟動Nexus伺服器。等待伺服器啟動完成,這可能需要幾分鐘的時間,特別是如果您第一次設定Nexus倉函式庫。

安裝Nexus作為Windows服務

您可以使用以下命令將Nexus安裝為Windows服務:

Nexus.exe /install <服務名稱>

這裡,<服務名稱>是可選的。開啟命令提示符,切換到${NexusInstallationDir}\bin目錄,然後執行Nexus.exe /install MyNexusService命令。

存取Nexus倉函式倉管理員

開啟瀏覽器,輸入http://localhost:8081(假設Nexus伺服器啟動在8081埠)存取Nexus倉函式倉管理員。點選右上角的「Signin」按鈕,輸入使用者名稱和密碼(預設使用者名稱為admin,密碼位於${NexusInstallationDir}\sonatype-work\nexus3\admin.password檔案中)。點選「Signin」按鈕登入。

建立主機倉函式庫以發布工件

點選「Server Administration and Configuration」按鈕,然後點選「Repositories」連結。點選「Create Repository」按鈕,選擇「Maven2 (hosted)」作為倉函式庫型別。輸入倉函式庫名稱,例如JenkinsBookCalculatorAPI_Release。滾動到頁面底部,點選「Create Repository」按鈕建立倉函式庫。

整合Maven與Nexus倉函式庫

現在,您需要將Maven與Nexus倉函式庫整合。這涉及組態Maven以使用Nexus倉函式庫作為其工件儲存函式庫。

內容解密:

  graph LR
    A[Maven] -->|整合|> B[Nexus倉函式庫]
    B -->|儲存|> C[工件]
    C -->|管理|> D[Nexus倉函式倉管理員]

圖表翻譯:

此圖表展示了Maven與Nexus倉函式庫之間的整合過程。Maven將工件發布到Nexus倉函式庫中,然後Nexus倉函式倉管理員負責管理和儲存這些工件。

自由式工作

自由式工作允許您定義一個工作流程,以便在Nexus倉函式庫中發布Java API。您可以使用Jenkins或其他CI/CD工具來定義和執行這個工作流程。

內容解密:

// Maven組態檔案pom.xml
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>calculator-api</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>Calculator API</name>
    <description>Calculator API</description>
    <distributionManagement>
        <repository>
            <id>nexus</id>
            <url>http://localhost:8081/nexus/content/repositories/releases</url>
        </repository>
    </distributionManagement>
</project>

圖表翻譯:

此Maven組態檔案pom.xml定義了一個Java API專案,並指定了其群組ID、工件ID、版本和包裝方式。它還定義了發布倉函式庫的URL,指向Nexus倉函式庫的發布倉函式庫。

整合Maven與Nexus倉函式庫並建立自由式工作以發布Java API

在前面的章節中,您已經組態了Nexus倉函式庫作為中央工件倉函式庫,以發布Java API Calculator.jar檔案。現在,您需要告知Maven使用新建立的Nexus倉函式庫。

步驟1:組態Nexus倉函式庫URL

您需要在專案的pom.xml檔案中列出Nexus倉函式庫URL。您可以透過以下步驟取得倉函式庫URL:

  • 複製URL欄位中的URL。
  • 開啟pom.xml檔案,並在<distributionManagement>標籤下新增此URL,如下所示:
<distributionManagement>
    <!-- 發布版本化發布 -->
    <repository>
        <id>myNexusRepo</id>
        <name>myNexusRepo</name>
        <url>http://localhost:8081/nexus/content/repositories/releases/</url>
    </repository>
</distributionManagement>

步驟2:組態Nexus倉函式庫使用者名稱和密碼

由於Nexus倉函式庫不允許匿名存取,您需要在settings.xml檔案中提供Nexus倉函式庫的使用者名稱和密碼(如果檔案不存在,請在${user.home}/.m2目錄下建立一個)。以下是組態Nexus倉函式庫使用者名稱和密碼的示例:

<servers>
    <server>
        <!-- 此ID應與pom.xml中提到的儲存函式庫伺服器ID相匹配 -->
        <id>myNexusRepo</id>
        <username>admin</username>
        <password>admin123</password>
    </server>
</servers>

請注意,<id>欄位中的值應與pom.xml檔案中的<repository>標籤中的<id>欄位值相同。

步驟3:發布CalculatorAPI.jar檔案至Nexus倉函式庫

您已經組態了Nexus倉函式庫URL和憑證。現在,您可以發布CalculatorAPI.jar檔案至Nexus倉函式庫。

  • 開啟命令提示符,切換到Java API專案目錄。
  • 執行mvn deploy命令。

此命令將執行所有構建生命週期階段,例如下載資源、編譯原始碼、編譯單元測試程式碼、執行單元測試案例和封裝類別檔案至CalculatorAPI1.0.jar。作為最終階段,已建立的CalculatorAPI1.0.jar將被佈署至Nexus倉函式庫。

步驟4:驗證發布

讓我們前往Nexus倉函式庫並檢視發布結果。前往Nexus倉函式庫儀錶板,然後點選左側的「瀏覽」連結,檢視「儲存函式庫」列表中是否有您剛剛發布的CalculatorAPI.jar檔案。

內容解密:

在這個過程中,我們使用Maven將Java API Calculator.jar檔案發布至Nexus倉函式庫。首先,我們需要在pom.xml檔案中組態Nexus倉函式庫URL,然後在settings.xml檔案中組態使用者名稱和密碼。最後,執行mvn deploy命令即可將CalculatorAPI.jar檔案發布至Nexus倉函式庫。

圖表翻譯:

  flowchart TD
    A[開始] --> B[組態Nexus倉函式庫URL]
    B --> C[組態使用者名稱和密碼]
    C --> D[執行mvn deploy命令]
    D --> E[發布CalculatorAPI.jar檔案至Nexus倉函式庫]
    E --> F[驗證發布結果]

在這個流程圖中,我們展示了整個發布過程,從組態Nexus倉函式庫URL到驗證發布結果。每一步驟都很重要,確保CalculatorAPI.jar檔案能夠成功發布至Nexus倉函式庫。

在持續整合與交付的浪潮下,有效管理構建產物已成為軟體開發流程中不可或缺的一環。本文深入探討瞭如何利用 Nexus 倉函式倉管理 Java API 的構建產物,並透過 Maven 完成自動化發布流程。透過設定pom.xml中的<distributionManagement>以及settings.xml中的伺服器認證資訊,Maven 可以順暢地將構建產物佈署至 Nexus 倉函式庫。此舉不僅確保了構建產物的版本控制,也簡化了團隊協作和軟體交付流程。然而,單純的佈署並不足以保證軟體品質,後續的版本管理、依賴解析、以及與其他 CI/CD 工具的整合,才是充分發揮 Nexus 倉函式庫價值的關鍵。對於追求工程效率的團隊而言,更進一步的探索如何客製化 Nexus 倉函式庫以滿足特定專案需求,將是提升軟體交付效能的下一步。玄貓認為,善用 Nexus 倉函式庫這類別工具,能有效降低技術債務,並為建構更穩健、可擴充套件的軟體系統奠定基礎。