我有一个应用程序,它根据属性数据(如上次修改日期)对图像进行排序。在我的单元测试资源文件夹中,我有图像test / resources /文件夹,在调用" gradle build"时会自动复制到build / resources / test。
问题是我需要文件具有相同的上次修改日期以进行测试。
是否可以在构建脚本中使用javas Files.copy来移动数据并维护它的属性?或者有没有办法让gradle停止搞乱我的文件?
Gradle任务:
task copyImages(type :Copy){
from 'src/test/resources'
into 'build/resources/test'
}
更新:
我基于反馈的解决方案是使用JavaExec
Gradle Build Script:
apply plugin: 'java'
repositories{
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.+'
}
task(moveImages, dependsOn: 'classes', type: JavaExec){
main = 'com.lifehug.support.TestSupport'
classpath = sourceSets.test.runtimeClasspath
args 'src/test/resources/navigator', 'build/resources/test/navigator'
}
defaultTasks 'moveImages'
然后这是我的java文件移动图像
Java文件:
public class TestSupport{
public static void main(String[] args) throws IOException {
if( args.length < 2) return;
final Path sourceDir = Paths.get(args[0]);
final Path targetDir = Paths.get(args[1]);
Files.walkFileTree(sourceDir, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Path target = targetDir.resolve(sourceDir.relativize(dir));
Files.copy(dir, target, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.copy(file, targetDir.resolve(sourceDir.relativize(file)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
return FileVisitResult.CONTINUE;
}
});
}
}
答案 0 :(得分:2)
检查Gradle Copy task文档我找不到保存文件时间戳的方法。显然,做了一些研究open issue。
作为一种解决方法,您可以使用其他方式进行复制,例如使用ant.copy作为@dnault建议或只使用java代码(请参阅示例here for Java 6和Java 7)。