您可以在支持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 属性用户手册章节