我正在尝试将Gradle构建的工件部署到Maven仓库,我需要为其指定凭据。这个现在工作正常:
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://.../nexus/content/repositories/snapshots/") {
authentication(userName: "admin", password: "admin123")
}
}
}
}
但我不喜欢将凭证存储在源代码管理中。使用Maven,我将定义服务器配置,并在~/.m2/settings.xml
中分配凭据。我如何使用Gradle做类似的事情?
答案 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。
gradle.properties
gradle-local.properties
(这应该被git忽略)。这比使用$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"
}
}
}