您可以在支持 Gradle 的 IDE 中打开此示例。

此示例展示了如何使用项目属性在将制品发布到 Maven 仓库时使用凭证。这种方法允许您将敏感配置保存在项目源代码之外,并在需要时注入。

maven-repository-stub 目录中的代码构建了一个插件,用于模拟 Maven 仓库以演示认证流程。它期望在服务器模拟器上使用以下硬编码凭证

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,它会立即告诉您缺少什么,而无需执行构建。凭证可以并且应该保存在项目源代码外部,并且只由需要发布制品的人知道,也许通过 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 属性用户手册章节