如何將 Maven 工件發佈到 GitHub 套件
1. 概述
在本教程中,我們將學習如何建立 Maven 工件並使其公開可用。我們將討論專案結構、使用 Maven 建置 JAR 檔案並將其發佈到 GitHub Packages。
之後,我們將了解客戶端如何從 GitHub 儲存庫安裝我們的套件作為 Maven 依賴項。
2. 建立Maven項目
我們將建立一個用於單元測試的小型實用函數庫。我們將首先設定 Maven 專案並在pom.xml
中配置主要屬性。
由於我們要發佈到 GitHub Packages,因此我們將使用io.github.<github_username>
模式作為groupId
。除此之外,我們將設定預設屬性,例如artifactId, version,
專案name,
和description, packaging
為jar
以及Java 版本:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>io.github.etrandafir93</groupId>
<artifactId>utilitest</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Utilitest</name>
<description>A collection of test helpers for AssertJ, Mockito and Awaitility</description>
<url>https://github.com/etrandafir93/utilitest</url>
<properties>
<java.version>11</java.version>
</properties>
<!-- license, distribution, dependenceis, build... etc. -->
</project>
3. 新增許可證
開源專案的許可證是一種法律協議,定義了其他人如何使用、修改和分發專案的程式碼。我們可以透過在 pom.xml 中新增<license>
部分來為 Maven 專案新增授權pom.xml:
<licenses>
<license>
<name>MIT License</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
</license>
</licenses>
正如我們所看到的,我們選擇了MIT 許可證,它允許任何人使用、修改和分發該軟體——只要包含原始許可證和版權聲明。或者,我們可以選擇 Apache 2.0、GPL 或opensource.org中的任何其他授權。
此外,我們將在專案的根目錄中新增LICENSE
文件:
utilitest
├── src
│ ├── main
│ └── test
├── LICENSE
└── pom.xml
4. 發佈到 GitHub 包
接下來,我們必須設定 Maven 來建置我們的工件並將其發佈到 GitHub。為此,我們將在pom.xml
中新增一個<distributionManagement>
部分,其中包括三個關鍵屬性:
-
“id” –
設定為“github
” -
“name” –
擁有儲存庫的個人帳號或組織的名稱 -
“url” –
發布套件的 URL,通常格式為https://maven.pkg.github.com/{owner}/{repository}
讓我們新增包含詳細資訊的<distributionManagement>
部分:
<distributionManagement>
<repository>
<id>github</id>
<name>etrandafir93</name>
<url>https://maven.pkg.github.com/etrandafir93/utilitest</url>
</repository>
</distributionManagement>
之後,我們需要從開發者設定頁面在 GitHub 上產生個人存取權杖:
我們可以配置令牌的範圍和到期日期。之後,我們將更新.m2/settings.xml
在<servers>
部分新增 GitHub username
和新產生的存取權令牌:
<servers>
<server>
<id>github</id>
<username>etrandafir93</username>
<password>{access_token}</password>
</server>
</servers>
此外,我們將在<profile>
部分中新增儲存庫 URL:
<profiles>
<profile>
<id>github</id>
<repositories>
<repository>
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
</repository>
<repository>
<id>github</id>
<url>https://maven.pkg.github.com/etrandafir93/utilitest</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
就是這樣!透過此設置,我們現在可以使用mvn deploy
命令將工件部署到 GitHub Packages:
> mvn deploy
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------< io.github.etrandafir93:utilitest >------------------
[INFO] Building Utilitest 1.0.0-SNAPOSHOT
[INFO] from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[ .... ]
Uploaded to github: https://maven.pkg.github.com/etrandafir93/utilitest/io/github/etrandafir93/utilitest/ 1.0.0-SNAPOSHOT/utilitest-1.0.0-SNAPOSHOT.pom (3.7 kB at 1.1 kB/s)
Uploaded to github: https://maven.pkg.github.com/etrandafir93/utilitest/io/github/etrandafir93/utilitest/ 1.0.0-SNAPOSHOT/utilitest-1.0.0-SNAPOSHOT.jar (4.5 kB at 1.4 kB/s)
Uploaded to github: https://maven.pkg.github.com/etrandafir93/utilitest/io/github/etrandafir93/utilitest/ maven-metadata.xml (368 B at 343 B/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17.463 s
[INFO] Finished at: 2024-09-21T19:44:10+02:00
[INFO] ------------------------------------------------------------------------
從日誌中可以看出,套件已成功上傳到GitHub。此外,我們應該能夠透過檢查 GitHub 網頁來看到我們上傳的套件:
5.安裝Maven依賴
預設情況下,上傳到 GitHub Packages 的工件會繼承父儲存庫的可見性。由於我們的儲存庫是公共的,因此我們可以輕鬆地將新庫安裝為 Maven 依賴項。
儘管該套件是公開的,GitHub 仍要求用戶端使用個人存取權杖進行身份驗證。產生和配置它的過程與以前相同,但是這一次,令牌的範圍可以限制為唯讀存取。
此外,我們需要在.m2/settings.xml
中或直接在pom.xml
中指定儲存庫 URL:
<repository>
<id>github</id>
<name>etrandafir93</name>
<url>https://maven.pkg.github.com/etrandafir93/*</url>
</repository>
最後,我們可以新增 Maven 依賴項並開始使用我們的新庫:
<dependency>
<groupId>io.github.etrandafir93</groupId>
<artifactId>utilitest</artifactId>
<version>1.0.0-SNAPOSHOT</version>
<scope>test</scope>
</dependency>
六、結論
在本文中,我們學習如何建立 Maven 專案、將其建置為 JAR 並將其發佈為 GitHub 套件。
我們查看了專案結構、設定pom.xml
檔案和授權。之後,我們配置了 GitHub 儲存庫並產生了用於發布套件的存取權杖。最後,我們示範了使用者如何將已發佈的工件安裝為 Maven 相依性。