您可以使用支援 Gradle 的 IDE 開啟此範例。

此範例展示了如何在使用 專案屬性 將 Artifact 發布到 Maven 儲存庫時使用憑證。這種方法讓您可以將敏感配置資訊保留在專案的原始碼之外,並僅在需要時注入。

maven-repository-stub 目錄中的程式碼建置了一個用於 stub Maven 儲存庫的外掛,以示範身份驗證流程。它預期伺服器 stub 上有以下硬編碼的憑證

maven-repository-stub/src/main/java/com/example/MavenRepositoryStub.java
private static final String USERNAME = "secret-user";
private static final String PASSWORD = "secret-password";

在實際專案中,您的建置會指向您組織的私有儲存庫。

發布的專案有一些範例 Java 程式碼,將被編譯並作為 Java 函式庫發布。Gradle 建置檔使用提供的憑證註冊到 Maven 儲存庫的發布

build.gradle.kts
publishing {
    publications {
        create<MavenPublication>("library") {
            from(components.getByName("java"))
        }
    }
    repositories {
        maven {
            name = "mySecureRepository"
            credentials(PasswordCredentials::class)
            // url = uri(<<some repository url>>)
        }
    }
}
build.gradle
publishing {
    publications {
        library(MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            name = 'mySecureRepository'
            credentials(PasswordCredentials)
            // url = uri(<<some repository url>>)
        }
    }
}

只有在需要憑證的任務(在本例中是發布到安全儲存庫的任務)要執行時,建置才會需要憑證。這允許您在不擔心憑證的情況下建置專案。嘗試執行 ./gradlew jar,它將會成功。執行 ./gradlew publish,它會立即告訴您缺少什麼,而無需執行建置。憑證可以而且應該與專案來源分開保存,並且只有需要發布 Artifact 的人員知道,可能由 CI 伺服器注入。

憑證值是使用 Gradle 屬性提供的,並且可以通過多種方式傳遞到發布任務

  • 透過命令列屬性

$ ./gradlew publish -PmySecureRepositoryUsername=secret-user -PmySecureRepositoryPassword=secret-password
  • 透過環境變數

$ ORG_GRADLE_PROJECT_mySecureRepositoryUsername=secret-user ORG_GRADLE_PROJECT_mySecureRepositoryPassword=secret-password ./gradlew publish
  • 透過在 gradle.properties 檔案中設定屬性

mySecureRepositoryUsername=secret-user
mySecureRepositoryPassword=secret-password

並執行

$ ./gradlew publish

敏感資料保存在專案來源之外,因為 gradle.properties 檔案可以位於使用者的 ~/.gradle 目錄中。

有關使用 Gradle 屬性的更多資訊,請參閱 Gradle 屬性使用者手冊章節