这是我的任务
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 目录中,除非已经存在具有相同名称的文件,除非它是快照。
但是当所有文件都存在时,快照根本不会被覆盖,而它们应该被覆盖。
不一致的是,当至少缺少 1 个文件时(无论它是否是快照(,突然所有快照都会被覆盖,但非快照不会被覆盖。
因此,当至少缺少一个文件时,脚本会按预期工作,但是当所有文件都存在时,它只会忽略 if 子句的一半表达式。
这几乎就像它缩短了整组文件的"exists(("表达式。
使用 gradlew 指向 gradle-5.0-bin.zip
似乎与此有关: gradle 问题 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()
}
}
}
}
不得不进行一些编辑,因为此构造不知道目的地目录。还必须将任务移动到依赖项列表下方,因为它给出了我还不了解的配置错误。