Gradle复制任务 - 过滤闭包时的空指针返回null

时间:2015-10-16 09:08:56

标签: groovy ant gradle

documentation表示如果我从封闭处返回null,则应该删除该行,但是当我这样做时

filter { String line ->
    line.startsWith('-') ? null : line
}

我明白了

Caused by: java.lang.NullPointerException
at org.gradle.api.internal.file.copy.LineFilter.getTransformedLine(LineFilter.java:67)
at org.gradle.api.internal.file.copy.LineFilter.ensureData(LineFilter.java:76)
at org.gradle.api.internal.file.copy.LineFilter.read(LineFilter.java:83)
at org.gradle.api.internal.file.copy.LineFilter.read(LineFilter.java:93)
at org.apache.tools.ant.util.ReaderInputStream.read(ReaderInputStream.java:117)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1025)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:58)
at org.gradle.api.internal.file.copy.DefaultFileCopyDetails.copyTo(DefaultFileCopyDetails.java:94)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyFile(AbstractFileTreeElement.java:93)
at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:74)
... 90 more

请注意,如果我输入一个空字符串而不是null,则会留下一个空行。所以1)为什么它没有记录的工作? 2)如果我做错了怎么能让这个过滤器工作?

以防万一(使用包装器):

------------------------------------------------------------
Gradle 2.4
------------------------------------------------------------

Build time:   2015-05-05 08:09:24 UTC
Build number: none
Revision:     5c9c3bc20ca1c281ac7972643f1e2d190f2c943c

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.4 compiled on April 29 2014
JVM:          1.7.0_79 (Oracle Corporation 24.79-b02)
OS:           Mac OS X 10.10.5 x86_64

1 个答案:

答案 0 :(得分:0)

看一下你的版本的documentation,我的意思是,不是现在的版本,这是目前最新版本和2.7版本。它只包含:

  

根据提供的闭包添加内容过滤器。将使用每一行(剥去行结尾)调用Closure,并返回一个String来替换该行。

没有关于null的消息。所以,似乎这种行为是在最新版本中添加的。由于javadocs,它从2.6版本开始引入。

如果您需要它,您必须使用更新的版本或使用基于Ant的自定义任务,就像在此SO answer中提到的那样,您需要正则表达式。