192

我正在尝试将 Gradle 构建的工件部署到 Maven 存储库,我需要为此指定凭据。这目前工作正常:

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

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

4

8 回答 8

264

~/.gradle/gradle.properties

mavenUser=admin
mavenPassword=admin123

构建.gradle

...
authentication(userName: mavenUser, password: mavenPassword)
于 2012-10-05T18:02:26.467 回答
123

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

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

您也不应该使用它,因为它会在失败时打印凭证!

这是他在你身上的样子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)

于 2016-02-25T13:00:38.710 回答
26

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

  1. 将默认值放入gradle.properties
  2. 每个开发人员都用gradle-local.properties(这应该被 git 忽略)覆盖。

这比覆盖使用更好,$USER_HOME/.gradle/gradle.properties因为不同的项目可能具有相同的属性名称。

请注意,该插件实际上添加gradle-${environment}.properties了默认为${environment}is 的位置local,并具有其他功能。使用前请阅读链接。

于 2015-12-29T08:47:21.593 回答
19

您还可以在命令行上使用-PmavenUser=user -PmavenPassword=password.

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

于 2014-12-16T16:25:50.007 回答
10

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

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

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

System.getenv()['YOUR_ENV_VARIABLE']
于 2012-10-05T17:13:37.050 回答
6

对于那些在 MacOS 上构建并且不喜欢在计算机上以明文形式留下密码的人,您可以使用钥匙串工具来存储凭据,然后将其注入构建中。归功于维克多·埃里克森。 https://pilloxa.gitlab.io/posts/safer-passwords-in-gradle/

于 2018-06-25T22:16:58.160 回答
0

构建.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
于 2021-04-17T13:35:00.797 回答
0

根据 7.1.1 gradle 文档,我们有如下语法来设置带有凭据的存储库,下面的代码片段应该在项目的 build.gradle 文件中

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

以上是为了展示 gradle 7.xx 中的语法更改。这可以更改为将密码作为变量,如上面批准的解决方案中所示。

于 2021-07-25T13:20:13.737 回答