将不应提交的Gradle配置(即凭据)放在何处?
我正在尝试将Gradle构建的工件部署到Maven repo,我需要为此指定凭据。这在目前来说效果不错:将不应提交的Gradle配置(即凭据)放在何处?,gradle,Gradle,我正在尝试将Gradle构建的工件部署到Maven repo,我需要为此指定凭据。这在目前来说效果不错: uploadArchives{ 存储库{ mavenDeployer{ 存储库(url:)http://.../nexus/content/repositories/snapshots/") { 身份验证(用户名:“admin”,密码:“admin123”) } } } } 但是我不喜欢在源代码管理中存储凭据。使用Maven,我将定义服务器配置,并在~/.m2/settings.xml中分
uploadArchives{
存储库{
mavenDeployer{
存储库(url:)http://.../nexus/content/repositories/snapshots/") {
身份验证(用户名:“admin”,密码:“admin123”)
}
}
}
}
但是我不喜欢在源代码管理中存储凭据。使用Maven,我将定义服务器配置,并在
~/.m2/settings.xml
中分配凭据。如何使用Gradle执行类似操作?您可以将凭据放入属性文件中,并使用以下类似的方法读取它:
Properties-props=新属性()
load(新文件输入流(“yourPath/credentials.properties”))
project.setProperty('props',props)
另一种方法是在操作系统级别定义环境变量,并使用以下方法读取它们:
System.getenv()['YOUR_ENV_VARIABLE']
~/.gradle/gradle.properties:
mavenUser=admin
mavenPassword=admin123
...
authentication(userName: mavenUser, password: mavenPassword)
构建.渐变:
mavenUser=admin
mavenPassword=admin123
...
authentication(userName: mavenUser, password: mavenPassword)
您还可以在命令行中使用
-PmavenUser=user-PmavenPassword=password
提供变量
这可能很有用,因为某些原因,您不能使用gradle.properties文件。例如,在构建服务器上,我们使用带有
-g
选项的Gradle,这样每个构建计划都有自己的Gradle\u HOME
如果您有特定于用户的凭据(即每个开发人员可能有不同的用户名/密码),那么我建议使用
gradle.properties
gradle local.properties
覆盖(这应该被git忽略)$USER\u HOME/.gradle/gradle.properties
重写要好,因为不同的项目可能具有相同的属性名称
请注意,该插件实际上添加了
gradle-${environment}.properties
,其中${environment}
的默认值为local
,并具有其他功能。使用前请先阅读链接。第一个答案仍然有效,但API在过去已更改。由于我的编辑没有被接受,我将其作为单独的答案发布
方法authentication()
仅用于提供身份验证方法(如Basic),而不提供任何凭据
您也不应该使用它,因为它会在失败时打印凭证
这就是在您的build.gradle中它应该是什么样子
maven {
credentials {
username "$mavenUser"
password "$mavenPassword"
}
url 'https://maven.yourcorp.net/'
}
在用户主页目录的gradle.properties
中,输入:
mavenUser=admin
mavenPassword=admin123
还要确保GRADLE\u USER\u HOME
设置为~/.GRADLE
,否则那里的属性文件将无法解析
另见:
及
(23.6.4.1)对于那些在MacOS上构建并且不喜欢在计算机上以明文形式保留密码的用户,您可以使用keychain工具存储凭据,然后将其注入到构建中。学分归维克多·埃里克森所有。
构建.gradle
apply from: "./build.gradle.local"
...
authentication(userName: project.ext.mavenUserName, password: project.ext.mavenPassword)
build.gradle.local(git被忽略)
是否应将gradle.properties
签入VCS
?而不是gradle用户主页中的属性(请参见上面的路径)。对于某些版本的gradles。。。使用mavenPass而不是mavenPassword我建议按如下方式传递项目属性身份验证(用户名:project.properties.mavenUser,密码:project.properties.mavenPassword)如果未指定属性mavenUser/Password,则生成不会失败。是否有方法执行此操作并避免将密码以纯文本形式存储在环境变量或文本文件中?您能否澄清OP将如何使用此方法?i、 e.它在名称空间uploadArchives{repositories{mavenDeployer中位于何处{对不起,我没有收到你的问题OP在名称空间uploadArchives>repositories>mavenDeployer>repository>authentication中使用身份验证。我想他们仍然会使用uploadArchives,那么OP的构建配置在应用你的解决方案时会是什么样子呢?他们是否需要删除身份验证,并且它会起作用?实际上我无法告诉您,因为我从未使用过mavenDeployer命名空间。Uploadarchives仍然是有效的任务,但该任务的凭据在maven命名空间中配置。此答案与问题不兼容。它使用的是maven publish
插件,而问题使用的是maven
插件。您知道使用admin123 a从安全角度看,s的密码是错误的,对不对;)你能添加一个完整的工作MWE吗。如何在build.gradle
中包含插件。如何在uploadArchives
config中使用凭据?@koppor不确定这是否仍然有效,但我已经在我的开源项目中使用了它-谢谢!不过我必须用道具设置每个参数。getProperty(“myParameterName”)使其工作:)