首頁 > Java > java教程 > JeKa:在 Maven Central 上發布的最簡單方法

JeKa:在 Maven Central 上發布的最簡單方法

Linda Hamilton
發布: 2024-12-30 21:28:13
原創
774 人瀏覽過

JeKa: The Simplest Way to Publish on Maven Central

JeKa 是一個注重簡單性的現代 Java 建置工具。
這篇文章示範如何以最少的配置發佈到 Maven Central。

先決條件:您需要一個 OSSRH 帳戶才能在 Maven Central 上發布。

使用 JeKa,您可以透過編輯 jeka.properties 檔案來完全配置構建,如下所示:

jeka.version=0.11.11
jeka.java.version=17

jeka.inject.classpath=dev.jeka:nexus-plugin
@nexus=

@project.moduleId=com.github.djeang:vincer-dom
@project.gitVersioning.enable=true

# Configuration for deploying to Maven central
@maven.publication.predefinedRepo=OSSRH
@maven.publication.metadata.projectName=Vincer-Dom
@maven.publication.metadata.projectDescription=Modern Dom manipulation library for Java
@maven.publication.metadata.projectUrl=https://github.com/djeang/vincer-dom
@maven.publication.metadata.projectScmUrl=https://github.com/djeang/vincer-dom.git
@maven.publication.metadata.licenses=Apache License V2.0:https://www.apache.org/licenses/LICENSE-2.0.html
@maven.publication.metadata.developers=djeang:djeangdev@yahoo.fr
登入後複製
登入後複製

請注意,依賴項列在專用的 dependency.txt 檔案中,以保持清晰的關注點分離。

要發佈到 Maven Central,請執行:jeka project:pack maven:publish。

請參閱此處的具體範例。

說明

現在您知道如何做了,讓我們解釋一下它是如何運作的。

Jeka 和 Java 版本控制

為了更好的可移植性和可重複性,我們可以聲明建立所需的 Jeka 和 Java 版本。如果主機上尚不存在這兩個版本,則會自動下載。

指定模組 ID 和版本控制

發佈的 moduleId 使用 @project.moduleId 屬性指定。

可以使用 @project.version 屬性明確指定版本。請注意,屬性可以在 jeka.properties 檔案中設定或作為命令列參數傳遞:-D@project.version=1.0.1.

相反,我們選擇依賴 Git 使用以下方式推斷版本:@project.gitVersioning.enable=true。如果目前提交沒有標籤,版本將設定為[branch]-SNAPSHOT;否則,它將是標籤名稱

配置發布儲存庫

@maven.publication.predefinedRepo=OSSRH 指示 Jeka 發佈到預先定義的 OSSRH 儲存庫。此儲存庫配置為當版本以 -SNAPSHOT 結尾時發佈到 OSSRH 快照儲存庫,否則發佈到發布儲存庫。

儲存庫使用下列環境變數來傳遞機密:

  • jeka.repos.publish.username:OSSRH 帳號使用者名稱
  • jeka.repos.publish.password:OSSRH 帳戶密碼
  • jeka.gpg.secret-key:Armored GPG 金鑰作為字串
  • jeka.gpg.passphrase:保護金鑰的密碼

jeka.gpg.secret-key 的內容可以透過執行:gpg --export-secret-key --armor my-key-name 取得。

提供出版品元數據

強制元資料使用 @maven.publication.metadata.xxx 屬性設定。

請注意,@maven.publication.metadata.licenses 屬性需要如下格式:[license1 name]:[license1 url],[license2 name]:[license2 url],...

自動發布發布

為了方便起見,我們使用Nexus插件,

它會自動關閉暫存儲存庫,無需手動幹預。

jeka.inject.classpath=dev.jeka:nexus-plugin 指示 Jeka 從 Maven Central 取得插件,而 @nexus= 啟動它。

執行建置

要發布,只需執行:jeka project:pack maven:publish。

這將:

  • 建立要發佈的 JAR(專案:pack)。
  • 建立原始碼和 Javadoc JAR。
  • 產生發布的POM檔案。
  • 計算所有校驗和。
  • 簽署所有已發布的文件。
  • 將所有內容推送到 OSSRH 儲存庫。

要查看將發佈的內容,請執行:jeka maven: info。

微調

Jeka 中的微調通常以程式設計方式實現,補充 jeka.properties 檔案中的聲明性配置。這種方法允許高度靈活和強大的配置,並具有靜態類型的優點。

自訂傳遞依賴

我們可以自訂發布的POM中提到的依賴項。

在以下範例中,我們刪除 com.google.guava:guava 依賴項,並強制 jfiglet 依賴項具有 RUNTIME 範圍。

jeka.version=0.11.11
jeka.java.version=17

jeka.inject.classpath=dev.jeka:nexus-plugin
@nexus=

@project.moduleId=com.github.djeang:vincer-dom
@project.gitVersioning.enable=true

# Configuration for deploying to Maven central
@maven.publication.predefinedRepo=OSSRH
@maven.publication.metadata.projectName=Vincer-Dom
@maven.publication.metadata.projectDescription=Modern Dom manipulation library for Java
@maven.publication.metadata.projectUrl=https://github.com/djeang/vincer-dom
@maven.publication.metadata.projectScmUrl=https://github.com/djeang/vincer-dom.git
@maven.publication.metadata.licenses=Apache License V2.0:https://www.apache.org/licenses/LICENSE-2.0.html
@maven.publication.metadata.developers=djeang:djeangdev@yahoo.fr
登入後複製
登入後複製

添加額外的文物

API 允許定義要發佈的其他工件。

在以下範例中,在發佈時產生了兩個工件:

  1. 包含文件的 ZIP 檔案。
  2. 一個陰影的 uber JAR(一個 JAR,其中包含依賴項中的所有類,並重新命名了套件以避免衝突)。
class Build extends KBean {

    @Override
    void init() {
        var publication = load(MavenKBean.class).getMavenPublication();
        publication.customizeDependencies(deps -> deps
                .minus("com.google.guava:guava")
                .withTransitivity("com.github.lalyos:jfiglet", JkTransitivity.RUNTIME)
        );
    }

}
登入後複製

在其他儲存庫上發布

要發佈到 Maven Central 以外的儲存庫,您可以設定下列屬性:

class Build extends KBean {

    @Override
    void init() {
        var publication = load(MavenKBean.class).getMavenPublication();
        publication.putArtifact(JkArtifactId.of("doc", "zip"), this::genDoc);
        publication.putArtifact(JkArtifactId.of("shade", "jar"), project.packaging::createShadeJar);
    }

    private void genDoc(Path targetZipFile) {
        // generate documentation and zip it in targetZipFile
    }

}
登入後複製

將這些屬性放在[USER HOME]/.jeka/global.properties(而不是jeka.properties 檔案)中,以保持專案間的配置一致並避免冗餘。

有關更多詳細信息,請參閱文件。

與Maven的比較

以下是將專案部署到 Maven Central 的 Maven POM 設定等效項:

jeka.repos.publish=https://my.company/myrepo

# Optional properties
jeka.repos.publish.username=myUsername
jeka.repos.publish.password=myPassword
jeka.repos.publish.headers.Authorization=Bearer:: XHrU8hHKJHJ454==67g
登入後複製

結論

Jeka 提供了一種更簡單但功能強大的方法來建立 Java 軟體並將工件發佈到 Maven Central 或其他儲存庫,與傳統工具相比,配置和工作量要少得多。

造訪網站、影片和範例,以了解 Jeka 可以做得更好的一切。

免責聲明:我是 Jeka 的作者。

以上是JeKa:在 Maven Central 上發布的最簡單方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板