不应该提交的Gradle配置(例如凭据)放在哪里?


155

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

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

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


3
您知道从安全角度来看,使用admin123作为密码是不好的,对吧;)
jwatkins 18/09/12

Answers:


228

〜/ .gradle / gradle.properties

mavenUser=admin
mavenPassword=admin123

build.gradle

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

2
如果gradle.properties不进行检查VCS
theblang 2014年

24
不是Gradle用户主页中的那个(请参阅上面的路径)。
Peter Niederwieser 2014年

对于某些版本的等级...使用mavenPass代替mavenPassword
Rodrigo

2
我建议通过项目属性如下身份验证(用户名:project.properties.mavenUser,密码:project.properties.mavenPassword)当未指定任何属性mavenUser / Password时,这不会使构建失败。
德米特里(Dmitry)

我必须做同样的事情,但是要使用2个不同的环境变量:SONATYPE_NEXUS_USERNAME和SONATYPE_NEXUS_PASSWORD
Snicolas

94

第一个答案仍然有效,但是API过去已更改。由于我的编辑没有被接受,因此我将其发布为单独的答案。

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

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

这是他的样子 build.gradle

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

gradle.properties您的userhome目录中,输入:

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


您能否阐明OP将如何使用它?也就是说,它将在命名空间中的哪个位置uploadArchives {存储库{mavenDeployer {
Matt C

抱歉,但我没有收到您的问题
问卷调查者

4
OP在名称空间uploadArchives>存储库> mavenDeployer>存储库>身份验证内使用身份验证。他们仍然想使用我假设的uploadArchives,那么应用您的解决方案后,OP的构建配置会如何?他们需要删除身份验证吗,它会起作用吗?
Matt C

实际上我无法告诉您,因为我从未使用过mavenDeployer命名空间。Uploadarchives仍然是有效任务,但是在maven名称空间中配置了该任务的凭据。
调查员

这个答案与问题不符。它使用的是maven-publish插件,而问题的使用的是maven插件。
Chry Cheng

16

您也可以在命令行中使用提供变量-PmavenUser=user -PmavenPassword=password

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


16

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

  1. 放入默认值 gradle.properties
  2. 每个开发人员都使用gradle-local.properties(忽略)覆盖。

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


您能否添加一个可以正常使用的MWE。如何在中包含插件build.gradle。如何在uploadArchives配置中使用凭证?
koppor

@koppor不知道这是否仍然有效,但我在开源项目中使用它- github.com/krishnaraj/oneclipboard/blob/master/build.gradle
Krishnaraj

7

您可以将凭证放入属性文件中,并使用类似以下内容的方式读取它:

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

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

System.getenv()['YOUR_ENV_VARIABLE']

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.