多项目执行gradlew dependencies --scan如何自动同意许可协议?
解决方案
错误原因分析
你之前使用的< "yes"属于文件输入重定向语法,要求右侧参数为文件路径,你传入的是字符串yes,系统会尝试读取当前目录下名为yes的文件,自然会抛出bash: yes: No such file or directory的报错。
可行方案
方案1:使用yes命令管道
yes是系统内置命令,会持续输出yes字符串,通过管道传递给gradlew即可自动应答确认:
# 单项目执行 yes | ./gradlew dependencies --scan # 批量脚本改造 for ...; do cd ...; yes | ./gradlew dependencies --scan; done
方案2:使用Gradle官方参数(更稳定)
Gradle扫描插件原生提供了跳过协议确认的JVM参数,无需依赖管道,兼容性更强,不会误应答其他交互提示:
./gradlew dependencies --scan -Dscan.agreeToTermsOfServiceUrl=yes
批量脚本直接替换原命令即可。
方案3:永久全局生效配置
如果需要长期使用--scan参数,可以在全局Gradle配置中添加参数永久跳过确认:
- 编辑用户目录下的
~/.gradle/gradle.properties文件(不存在则新建) - 添加如下配置:
systemProp.scan.agreeToTermsOfServiceUrl=yes
配置完成后所有带--scan的gradlew命令都不需要手动确认协议。
补充说明
如果想用字符串作为标准输入传递给命令,也可以使用here-string语法:
./gradlew dependencies --scan <<< "yes"
该写法可以解决你之前的报错问题,但仍推荐优先使用官方参数方案,可靠性更高。
内容的提问来源于stack exchange,提问作者OrenIshShalom
相关产品推荐
相关产品推荐

