停止Gradle在副本上修改我的图像/文件属性信息

时间:2015-04-05 06:10:09

标签: java groovy gradle

我有一个应用程序,它根据属性数据(如上次修改日期)对图像进行排序。在我的单元测试资源文件夹中,我有图像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;
             }

           });

    }

}

1 个答案:

答案 0 :(得分:2)

检查Gradle Copy task文档我找不到保存文件时间戳的方法。显然,做了一些研究open issue

作为一种解决方法,您可以使用其他方式进行复制,例如使用ant.copy作为@dnault建议或只使用java代码(请参阅示例here for Java 6和Java 7)。