问题说明

最近在调整公司项目的公共脚本,需要根据多个变量是否存在来判断是否引入相应的bom,伪代码如下:
gradle.properties中

xBomVersion=1.0.0

构建脚本片段:

configure(allprojects) {
    apply plugin: 'java'
    apply plugin: 'java-library'
    apply plugin: "io.spring.dependency-management"
    configurations.all {
        dependencyManagement {
            imports {
                if(xBomVersion变量存在){
                    mavenBom("xgroup:x-dependencies:${xBomVersion}")
                }
                if(yBomVersion变量存在){
                    mavenBom("ygroup:y-dependencies:${yBomVersion}")
                }
            }
        }
    }
}

如果if条件是xBomVersion != nullyBomVersion != null,则当有一个变量未在gradle.properties中配置时,会被gradle抛出Configuration with name 'xBomVersion' not found错误。

思路及解决

原因既然是有变量不存在,就判断这个变量是否存在即可。

根据 gradle property is defined 关键字查到一篇StackOverFlow,文章中提到可以使用if (project.hasProperty('special'))方式来判断变量是否定义。

则最终使用这种办法实现了这个需求。