我正在使用maven-publish插件向nexus存储库发布工件。我不想将我的nexus存储库的实际凭据放在build.gradle文件中。所以我决定使用如下所示的项目属性
credentials {
username "$nexus_username"
password "$nexus_password"
}
现在我可以使用gradle publish -Pnexus_username=<myusername> -Pnexus_password=<mypass>
将我的工件发布到我的nexus存储库。但是,为正常的gradle构建继续传递此项目属性没有任何意义。如果我没有通过gradle就会抛出错误Could not find property 'nexus_username'
任何人都知道更好的方法来解决这个问题。
答案 0 :(得分:4)
在挖掘之后找到解决方案
if(! hasProperty("nexus_username")){
ext.nexus_username=""
}
if(! hasProperty("nexus_password")){
ext.nexus_password=""
}
如果项目属性不可用,我在这里创建一个空白的用户名和密码。但我仍然觉得这是一个解决方案,而不是正确的解决方案。如果有人找到更优雅的解决方案,请回复。
答案 1 :(得分:0)
我将凭据保存在用户特定的 Gradle属性中,因此只有我的用户帐户才能访问这些值,我可以在Gradle项目中保留虚拟(或未定义)值。这样,如果我将项目分发给其他人或将项目提交给源代码控制,则没有人获得我的个人凭据或设置。
正如Gradle User Guide: The Build Environment中所述,用户特定的属性将覆盖项目的本地 gradle.properties 文件中设置的所有属性,其中属性名称匹配。使用-P
在命令行上输入的值仍将优先于两个以前的源。
您的用户特定文件名为gradle.properties
,位于GRADLE_USER_HOME
环境变量(如果已设置)指定的路径中,默认为:
~/.gradle/gradle.properties
%USERPROFILE%\.gradle\gradle.properties
然后,您可以在构建脚本中使用hasProperty
方法,或通过编辑(或创建)项目 gradle.properties 来定义默认值文件(与 build.gradle 文件处于同一级别):
# Do not put real credentials here!
# Instead, copy to ~/.gradle/gradle.properties and set the values there.
nexus_username =
nexus_password =
此方法的主要警告是,您的特定于用户的属性文件只能为给定的属性名称提供单个值。如果您有多个项目使用相同的属性名称但需要不同的值,那么这可能是一个问题。此外,该文件是纯文本,因此它可能不是密码的最佳位置,除非您愿意冒这个风险。