首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在gradle Exec任务中是否有过滤stderr的简单方法?

在gradle Exec任务中是否有过滤stderr的简单方法?
EN

Stack Overflow用户
提问于 2016-03-28 19:25:07
回答 1查看 1.1K关注 0票数 2

我有一个Exec任务,它运行命令(Inkscape,在"no-gui“模式下)。这个命令非常嘈杂,而且往往会向stderr发出许多不重要的警告。但是,它发送给stderr的一些东西是有用的,所以我不想完全抑制它的stderr。

目前,我有一个包装外壳脚本,它使用grep -v过滤来自stderr的消息,我知道这些消息是没有意义的。然后让我的Exec任务调用这个脚本。

不过,我想知道是否有一种方法可以使它更加独立,这样我就不需要依赖外部shell脚本了。

我的分级任务如下所示:

代码语言:javascript
复制
task createIcon(type:Exec) {
    def outdir = new File(fromSvgDir, "drawable-ldpi/")
    outputs.dir(outdir)
    doFirst {
        outdir.mkdirs()
    }
    def svg = 'src/images/ic_launcher.svg'
    inputs.source(new File(svg))
    def png = new File(outdir, "ic_launcher.png")
    outputs.file(png)
    commandLine "$workingDir/svgToPng.sh", svg, png
}

svgToPng.sh看起来是这样的:

代码语言:javascript
复制
#!/bin/bash
svg="$1"
png="$2"

exec inkscape -z -D -w 48 -e "$png" "$svg" 2> >(
    grep -v '^\*\* (inkscape:[0-9]*): CRITICAL \*\*: dbus_g_' |
    grep -v '^$' |
    grep -v '^Failed to get connection$' >&2
)

(是的,信不信由你,那些“关键”错误是无关紧要的,Inkscape实际上成功地完成了它应该做的事情,尽管如此。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-28 21:40:45

我还没有对此进行测试,但可能会有一些变化:

代码语言:javascript
复制
task createIcon << {
    def os = new ByteArrayOutputStream()

    def result = exec {
        def outdir = new File(fromSvgDir, "drawable-ldpi/")
        outputs.dir(outdir)
        doFirst {
            outdir.mkdirs()
        }
        def svg = 'src/images/ic_launcher.svg'
        inputs.source(new File(svg))
        def png = new File(outdir, "ic_launcher.png")
        outputs.file(png)
        commandLine "$workingDir/svgToPng.sh", svg, png
        standardOutput = os
    }

    def outputAsString = os.toString()
    def match = outputAsString =~ /somepattern/
    println match
}

您还可以根据特定的匹配情况,通过抛出异常来停止构建。

代码语言:javascript
复制
throw new GradleException('error occurred')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36269567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档