我有一项任务要在Gradle配置中存档一些必需的文件:
task zip4BuildServer(type: Zip) {
classifier = 'src'
from projectDir
include 'src/**/*'
include 'lib/**/*'
include 'gradle/**/*'
include 'build.gradle'
include 'settings.gradle'
include 'data_source.xml'
include 'gradlew'
include 'gradlew.bat'
archiveName "${baseName}-${getDate()}-${revision}.${extension}"
}
我想从存档中的build.gradle
中删除一些行(不在源位置)。
怎么做?
如果我这样写
from projectDir
{
eachFile { FileCopyDetails details ->
if(details.file.text.contains("some word")) {
}
}
}
它说
212: Ambiguous expression could be a parameterless closure expression, an isolated open code block, or it may continue a previous statement;
solution: Add an explicit parameter list, e.g. {it -> ...}, or force it to be treated as an open block by giving it a label, e.g. L:{...}, and also either remove the previous newline, or add an explicit semicolon ';' @ line 212, column 5.
{
^
1 error
如何解决?我不明白错误信息。
答案 0 :(得分:0)
它应该以这种方式工作:
A
答案 1 :(得分:0)
from projectDir
{
eachFile { FileCopyDetails details ->
if(details.file.text.contains("some word")) {
}
}
}
不起作用,因为这是两个表达式,from projectDir
后面跟着Groovy不确定你想要什么,一个未使用的闭包,一个代码块,......就像错误描述的那样。在Groovy中,换行符可以在表达式完成时终止它。 (没有未公开的括号,没有未公开的引号,......)。所以,如果你愿意写
from(projectDir) {
eachFile { FileCopyDetails details ->
if(details.file.text.contains("some word")) {
}
}
}
它实际上应该可以工作,但我会这样做:
from projectDir
eachFile { FileCopyDetails details ->
if(details.file.text.contains("some word")) {
}
}
或者在我看来更像这样:
from projectDir
filter { it.contains('some word') ? null : it }
但请注意,您应该只过滤文本文件。如果将过滤器应用于二进制文件,则可能会破坏该过程中的二进制文件。这不仅适用于最后的解决方案,也适用于eachFile
解决方案。
如果你的副本规范中也有二进制文件,你可能会这样。 G。想要使用filesMatching
之类的
from projectDir
filesMatching(['build.gradle', '**/*.java']) {
filter { it.contains('some word') ? null : it }
}