Gradle自定义任务调用maven exec插件执行clean package报流关闭错误
问题原因
这个stream is closed报错是Gradle进程与Maven子进程之间的输出流转发异常导致,常见触发原因如下:
- 所用gradle-maven-exec-plugin版本与当前Gradle版本不兼容,插件内部的子进程输出流处理逻辑存在缺陷,在Maven任务未完全执行完毕时就提前关闭了Gradle侧的输出接收流
- Maven执行过程中输出了颜色控制码、动态进度条等特殊字符,Gradle的默认输出处理逻辑识别异常主动关闭了流
- 自定义任务的
mavenexec配置未指定输出流继承规则,默认的流转发逻辑在输出内容较多时提前终止
解决方案
- 优先在
mavenexec配置块中添加流继承规则,强制让Maven输出直接对接Gradle的标准输出/错误流,绕过插件自带的转发逻辑:
task 41_RunUIUnittests { doLast { def buildDir = file('../../build/build.functionaltests') println '\tFrom ' + buildDir mavenexec { workingDir buildDir goals 'clean', 'package' // 新增以下两行配置 standardOutput = System.out errorOutput = System.err } } }
- 如果修改配置后仍报错,给Maven添加批处理模式参数,关闭特殊字符输出:
将goals配置修改为:goals 'clean', 'package', '-B',-B参数会开启Maven批处理模式,关闭颜色输出、动态进度条等会输出特殊控制字符的功能。 - 若以上方案均无效,升级gradle-maven-exec-plugin到适配你当前Gradle版本的正式发布版本即可。
内容的提问来源于stack exchange,提问作者Frederic
相关产品推荐
相关产品推荐

