亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用gradle插件發布項目到nexus中央倉庫的方法

發布時間:2021-07-07 16:27:08 來源:億速云 閱讀:351 作者:chen 欄目:編程語言

本篇內容介紹了“使用gradle插件發布項目到nexus中央倉庫的方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

簡介

Sonatype 提供了一個叫做開源軟件資源庫托管Open Source Software Repository Hosting (OSSRH) 的工具,幫助我們來方便的將項目發布到中心倉庫中。

但是這個工具和我們的項目構建是割裂的,尤其是在CI集成構建中,很難做到自動化。

Gradle是一個很好的構建工具,靈活而又強大,可不可以直接在Gradle中的任務中直接構建和上傳到中央倉庫或者其他自定義的nexus倉庫中呢?答案是肯定的。

Gradle Nexus Publish Plugin歷史

今天要給大家介紹的gradle插件名字叫做Gradle Nexus Publish Plugin,最近才發布了1.0.0版本,有小伙伴可能要問了,gradle出來這么久了,最近才有這樣的插件嗎?

其實不然,我們來講一下gradle Nexus發布插件的歷史。

2015年,Marcin Zaj?czkowski創建了gradle-nexus-staging-plugin,該插件可在Nexus存儲庫管理器中關閉和釋放staging存儲庫。使用這個插件就可以直接從代碼中將Gradle項目發布到Maven Central倉庫。多年來,它已經在全球各地被多個項目所采用。

但是這個插件存在一個小問題: 由于Gradle發布過程中的技術限制,因此需要使用啟發式技術來跟蹤隱式創建的staging存儲庫,對于給定狀態的多個存儲庫,通常會發布失敗。尤其是在持續集成服務Travis CI在2019年末更改其網絡架構之后,這個插件問題就更多了。

基于這個問題,馬克·菲利普(Marc Philipp)創建了另外一個插件Nexus Publish Plugin,該插件豐富了Gradle中的發布機制,可以顯式創建staging存儲庫并直接向其發布(上傳)組件。

通常我們需要將這兩個插件一起使用,但是,一個功能需要使用到兩個插件還是會讓用戶感到困惑。所以Gradle Nexus Publish Plugin在2020/2021年應運而生了,它的目的就是合并上面兩個插件的功能。

插件的使用

在gradle中使用該插件很簡單,首先需要引入這個插件:

plugins {
    id("io.github.gradle-nexus.publish-plugin") version "?version?"
}

注意,這個插件必須在 Gradle 5.0 或者之后的版本使用,并且在根項目中引入。

接下來,我們需要定義要發布的倉庫,如果是通過Sonatype’s OSSRH Nexus發布到Maven的中央倉庫,那么需要添加sonatype(),如下所示:

nexusPublishing {
    repositories {
        sonatype()
    }
}

在sonatype()中,實際上定義了nexusUrl 和 snapshotRepositoryUrl。

發布到中央倉庫是需要用戶名密碼的,我們需要設置sonatypeUsername 和 sonatypePassword 這兩個項目的屬性。一種方法是在~/.gradle/gradle.properties 中進行配置,或者設置 ORG_GRADLE_PROJECT_sonatypeUsername 和 ORG_GRADLE_PROJECT_sonatypePassword 這兩個環境變量。

或者,可以直接在sonatype 中進行定義:

nexusPublishing {
    repositories {
        sonatype {
            username = "your-username"
            password = "your-password"
        }
    }
}

最后,調用publishToSonatype和 closeAndReleaseSonatypeStagingRepository就可以分別發布到Sonatype和關閉并發布到中央倉庫了。

注意,上面的closeAndReleaseSonatypeStagingRepository實際上是包含了兩步操作:close和release。我們也可以僅僅調用closeSonatypeStagingRepository,然后手動登錄Nexus UI,進行release操作。

下面是兩個分別使用groovy和Kotlin的具體的例子:

Groovy DSL

plugins {
    id "java-library"
    id "maven-publish"
    id "io.github.gradle-nexus.publish-plugin" version "?version?"
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from(components.java)
        }
    }
}

nexusPublishing {
    repositories {
        myNexus {
            nexusUrl = uri("https://your-server.com/staging")
            snapshotRepositoryUrl = uri("https://your-server.com/snapshots")
            username = "your-username" // defaults to project.properties["myNexusUsername"]
            password = "your-password" // defaults to project.properties["myNexusPassword"]
        }
    }
}

Kotlin DSL

plugins {
    `java-library`
    `maven-publish`
    id("io.github.gradle-nexus.publish-plugin") version "?version?"
}

publishing {
    publications {
        create<MavenPublication>("mavenJava") {
            from(components["java"])
        }
    }
}

nexusPublishing {
    repositories {
        create("myNexus") {
            nexusUrl.set(uri("https://your-server.com/staging"))
            snapshotRepositoryUrl.set(uri("https://your-server.com/snapshots"))
            username.set("your-username") // defaults to project.properties["myNexusUsername"]
            password.set("your-password") // defaults to project.properties["myNexusPassword"]
        }
    }
}

默認情況下nexusPublishing中的connectTimeout和clientTimeout是5分鐘,可以根據自己的需要進行調整。

插件背后的故事

我們來看一下這個插件背后是怎么工作的。

首先定義的nexusPublishing { repositories { ... } } 會攔截所有子項目的 maven-publish 插件,用來修改發布地址。

如果項目的版本號不是以-SNAPSHOT結尾,這說明是發布版本,那么會創建一個initialize${repository.name.capitalize()}StagingRepository 任務,開啟一個新的staging倉庫,并且設置好對應的URL。在多項目構建中,所有擁有相同nexusUrl 的子項目,將會使用同樣的staging倉庫。

initialize${repository.name.capitalize()}StagingRepository為每個配置好的倉庫地址,生成發布任務。

為每個發布任務生成一個 publishTo${repository.name.capitalize()} 生命周期task。

在發布任務之后分別創建 close${repository.name.capitalize()}StagingRepository 和 release${repository.name.capitalize()}StagingRepository 任務。

“使用gradle插件發布項目到nexus中央倉庫的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁乡县| 舞阳县| 栾城县| 宝清县| 延长县| 茌平县| 尼木县| 平阳县| 晴隆县| 阿坝| 岱山县| 益阳市| 疏勒县| 张家口市| 德安县| 丹寨县| 马山县| 黎川县| 富阳市| 绥棱县| 介休市| 体育| 钦州市| 蛟河市| 木里| 阳江市| 安溪县| 台东市| 浦北县| 兴和县| 远安县| 文水县| 威远县| 西藏| 沂源县| 贡觉县| 霞浦县| 楚雄市| 历史| 嘉荫县| 永康市|