您可以在 IDE 中使用 IntelliJ 原生导入器Eclipse Buildship 打开此示例。

此示例展示了使用 项目属性 将工件发布到 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 属性用户手册章节