Java Gradle插件读取机密(api密钥、密码)属性(如Android插件中的buildConfigField)

Java Gradle插件读取机密(api密钥、密码)属性(如Android插件中的buildConfigField),java,build.gradle,password-protection,secret-key,android-buildconfig,Java,Build.gradle,Password Protection,Secret Key,Android Buildconfig,是否有任何gradle函数/插件可以从特殊配置/属性文件中读取/绑定一些秘密属性(api密钥、密码)? 您可以在~/.gradle/gradle.properties文件中设置属性: apiKey=SUPER\u SECRET\u值 而不是在project build.gradle中: 在项目本身中,您使用BuildConfig.API\u键string常量 gradle中是否有针对其他(java)项目的类似解决方案 或者这种方法是错误的,应该使用其他解决方法?您可以随时使用。您可以通过copy

是否有任何gradle函数/插件可以从特殊配置/属性文件中读取/绑定一些秘密属性(api密钥、密码)?

您可以在~/.gradle/gradle.properties文件中设置属性:

apiKey=SUPER\u SECRET\u值

而不是在project build.gradle中:

在项目本身中,您使用
BuildConfig.API\u键
string常量

gradle中是否有针对其他(java)项目的类似解决方案

或者这种方法是错误的,应该使用其他解决方法?

您可以随时使用。您可以通过copy命令传递资源或源文件,并用渐变变量替换标记,如
@API_KEY@
(使用
过滤器
替换标记
)或
${API_KEY}
(使用
展开

例如:

processResources {
    filter(ReplaceTokens, tokens: [API_KEY: apiKey])
}

将用您在任何资源文件中的实际API密钥替换子字符串
@API_KEY@

作为我先前回答的替代方法,您可以编写一个自定义的Gradle任务,使用这就是一个例子。

它看起来像是老式的Ant Maven解决方案,但我正在寻找一些现代的、实际的解决方案除了你认为它是老式的以外,你特别不喜欢这个解决方案的哪些方面?Android也在为你做同样的事情。唯一真正的区别是Android似乎正在生成源代码,而
filter
只是在修改资源。您甚至可以使用这种技术来替换Java文件中的值。在这种解决方案中,我不喜欢这样:“Android正在生成源代码,而filter只是在修改资源”:
processResources {
    filter(ReplaceTokens, tokens: [API_KEY: apiKey])
}