在哪里放置不应提交的Gradle配置(即凭证)?

时间:2012-10-05 15:16:55

标签: gradle

我正在尝试将Gradle构建的工件部署到Maven仓库,我需要为其指定凭据。这个现在工作正常:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://.../nexus/content/repositories/snapshots/") {
                authentication(userName: "admin", password: "admin123")
            }
        }
    }
}

但我不喜欢将凭证存储在源代码管理中。使用Maven,我将定义服务器配置,并在~/.m2/settings.xml中分配凭据。我如何使用Gradle做类似的事情?

8 个答案:

答案 0 :(得分:197)

<强>〜/ .gradle / gradle.properties

mavenUser=admin
mavenPassword=admin123

<强>的build.gradle

...
authentication(userName: mavenUser, password: mavenPassword)

答案 1 :(得分:70)

第一个答案仍然有效,但API过去已发生变化。由于我的编辑没有被接受,我将其作为单独的答案发布。

方法authentication()仅用于提供身份验证方法(例如Basic),但不提供任何凭据。

你也不应该使用它,因为它在失败时打印凭证是真的!

这是他在build.gradle

中的样子
    maven {
        credentials {
            username "$mavenUser"
            password "$mavenPassword"
        }
        url 'https://maven.yourcorp.net/'
   }

在您的用户家庭目录中的gradle.properties

mavenUser=admin
mavenPassword=admin123

同时确保GRADLE_USER_HOME设置为~/.gradle,否则其中的属性文件将无法解决。

另见:

https://docs.gradle.org/current/userguide/build_environment.html

https://docs.gradle.org/current/userguide/dependency_management.html(23.6.4.1)

答案 2 :(得分:13)

如果您拥有特定于用户的凭据(即每个开发人员可能有不同的用户名/密码),那么我建议您使用gradle-properties-plugin

  1. 将默认值放在gradle.properties
  2. 每个开发人员都会覆盖gradle-local.properties(这应该被git忽略)。
  3. 这比使用$USER_HOME/.gradle/gradle.properties覆盖更好,因为不同的项目可能具有相同的属性名称。

答案 3 :(得分:11)

您还可以在命令行上使用-PmavenUser=user -PmavenPassword=password提供变量。

由于某种原因,您无法使用gradle.properties文件。例如。在构建服务器上,我们使用带有-g选项的Gradle,以便每个构建计划都拥有GRADLE_HOME

答案 4 :(得分:7)

您可以将凭据放在属性文件中,并使用以下内容进行读取:

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props)

另一种方法是在操作系统级别定义环境变量,并使用以下方法读取它们:

System.getenv()['YOUR_ENV_VARIABLE']

答案 5 :(得分:1)

对于那些在MacOS上构建并且不希望将密码以明文形式保留在计算机上的用户,可以使用钥匙串工具存储凭据,然后将其注入到构建中。积分归Viktor Eriksson所有。 https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/

答案 6 :(得分:0)

build.gradle

apply from: "./build.gradle.local"
... 
authentication(userName: project.ext.mavenUserName, password: project.ext.mavenPassword)

build.gradle.local(忽略 git)

project.ext.mavenUserName=admin
project.ext.mavenPassword=admin123

答案 7 :(得分:0)

根据 7.1.1 gradle 文档,我们有如下使用凭据设置存储库的语法

repositories {
maven {
    url "http://repo.mycompany.com"
    credentials {
        username "user"
        password "password"
    }
}

}