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 版本。如果主機上尚不存在這兩個版本,則會自動下載。
發佈的 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.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。
這將:
要查看將發佈的內容,請執行: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 允許定義要發佈的其他工件。
在以下範例中,在發佈時產生了兩個工件:
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 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中文網其他相關文章!