我有一个相当复杂的Gradle构建过程,其中一步需要与服务进行通信,我需要一个特殊的令牌文件。我可以手动生成此令牌文件,但我想将其添加到我的构建中,以便在没有令牌文件时提示用户提供其凭据。
我引用了以下有关此内容的博文:https://www.timroes.de/2014/01/19/using-password-prompts-with-gradle-build-files/,但它遗漏了一个小细节。我不想无条件地提示用户提供他们的凭据;如果需要创建令牌文件,我只想提示它们。
我们说我有以下任务:
task createToken(type: Exec) {
dependsOn userCredentialPrompt
outputs.file 'creds.token'
environment 'USERNAME', project.username
environment 'PASSWORD', project.password
executable './create_token_file'
}
task somethingRequiringToken {
dependsOn: createToken
inputs.file 'creds.token'
// Other task-specific configuration here.
}
userCredentialPrompt
任务是提示用户提供凭据并将project.username
和project.password
分配给正确值的任务(使用上面链接的博客文章等逻辑)。< / p>
这里的问题是用户名和密码都为空。我很确定我理解其原因。它们在配置时设置,但用户凭据的提示在执行时发生。也就是说,我不知道让Gradle行事的正确方法,以便发生以下情况:
执行somethingRequiringToken
时,如果缺少creds.token
文件,则会运行createToken
。
执行somethingRequiringToken
时,如果存在creds.token
文件,则不会执行createToken
任务。
执行createToken
时,系统会提示用户提供凭据。
获取用户凭据后,会将其(合理安全地)传递给生成creds.token
文件的外部可执行文件。