这是我的任务
task copyDeps(type: Copy) {
from configurations.compile
into 'build/lib'
eachFile {
if (it.relativePath.getFile(destinationDir).exists() && !it.relativePath.getFile(destinationDir).getName().contains("SNAPSHOT")) {
it.exclude()
}
}
}
并且应该将所有依赖项下载到build / lib目录中,除非已经存在一个具有相同名称的文件,除非它是快照。
但是,当所有文件都存在时,快照根本不会被覆盖,而应将其覆盖。
不一致的是,当至少有一个文件丢失时(无论它是否是快照都无关紧要),然后突然所有快照都会被覆盖,但非快照会被覆盖。
因此,当缺少至少一个文件时,脚本将按预期运行,但是当所有文件都存在时,它将忽略if子句的一半表达式。
几乎就像它使整个文件集的“exists()”表达式短路一样。
使用gradlew指向gradle-5.0-bin.zip
最佳答案
似乎与此有关:gradle issue 4663
复制任务具有输入和输出的概念,并且自上次运行以来输入或输出均未更改(相同的依赖关系列表,目标目录中复制的文件的相同列表)时,复制任务被认为是最新的通过gradle。
找到替代方案:
task copyDeps() {
project.copy {
from configurations.compile
into 'build/lib'
eachFile {
if (it.relativePath.getFile(project.file('build/lib')).exists() && !it.relativePath.getFile(project.file('build/lib')).getName().contains("SNAPSHOT")) {
it.exclude()
}
}
}
}
必须进行一些编辑,因为此构造不知道destinationDir。还必须将任务移至依赖项列表下方,因为它给了我尚不了解的配置错误。
关于gradle - 与eachFile的Gradle Copy任务if子句不一致,我在做什么错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986777/