如何在settings.gradle中读取命令行参数以跳过指定子项目构建?
解决Settings.gradle中检测命令行-P参数的问题
你的问题出在使用rootProject.hasProperty('NO_LIBRARY_BUILD')来检测参数——在settings.gradle脚本执行的阶段,命令行传入的-P属性还没被同步到rootProject的属性集合里,所以rootProject自然检测不到这个参数,导致逻辑判断出错。
这里给你两种可靠的解决方法:
方法一:直接使用Settings上下文的hasProperty()
Settings脚本本身就提供了hasProperty()方法,可以直接访问构建过程中的全局属性(包括命令行-P传入的参数),修改后的代码如下:
rootProject.name='MyProject' if (!hasProperty('NO_LIBRARY_BUILD')) { print "=== BUILDING OF LIBRARY PROJECTS. Pass -PNO_LIBRARY_BUILD to gradle to skip building ===" include('Lib1') project(':Lib1').projectDir=file('Path/to/Lib1') include('Lib2') project(':Lib2').projectDir=file('Path/to/Lib2') } else { print "=== SKIPPING BUILD OF LIBRARY PROJECTS ===" }
方法二:检查Gradle启动参数集合
如果你想更明确地指定检查命令行传入的项目属性,可以直接访问gradle.startParameter.projectProperties这个Map集合,判断是否包含目标参数:
rootProject.name='MyProject' if (!gradle.startParameter.projectProperties.containsKey('NO_LIBRARY_BUILD')) { print "=== BUILDING OF LIBRARY PROJECTS. Pass -PNO_LIBRARY_BUILD to gradle to skip building ===" include('Lib1') project(':Lib1').projectDir=file('Path/to/Lib1') include('Lib2') project(':Lib2').projectDir=file('Path/to/Lib2') } else { print "=== SKIPPING BUILD OF LIBRARY PROJECTS ===" }
这两种方式都能在settings.gradle阶段正确识别-PNO_LIBRARY_BUILD参数,第一种写法更简洁,第二种则更清晰地表明你在检查命令行传入的属性,根据你的习惯选择即可。
内容的提问来源于stack exchange,提问作者Gerasimos R
相关产品推荐
相关产品推荐

