2017-07-31 78 views
0

我不得不在这个项目中使用Gradle 2.3。手动删除文件后,Gradle Copy Task是最新版本

我想从一个自定义配置复制一组依赖关系到一个特定的目录。

如果我手动删除其中一个文件,Gradle仍会将该任务标记为“最新日期”,并最终得到一组不完整的文件。

task copyFiles(type: Copy) { 
    from configurations.zips 
    into 'zip-dir' 
    configurations.zips.allDependencies.each { 
     rename "-${it.version}", '' 
    } 
} 

虽然这在v4.0.2中按预期工作。

要解决它,我正在计算该目录中的文件。

task copyFiles(type: Copy) { 
    outputs.upToDateWhen { 
     def count = new File('zip-dir').listFiles().count { it.name ==~ /.*zip/ } 
     count == configurations.zips.files.size() 
    } 
    from configurations.zips 
    into 'zip-dir' 
    configurations.zips.allDependencies.each { 
     rename "-${it.version}", '' 
    } 
} 

哪个问题和版本的gradle是固定的,是否有比迄今为止更好的解决方法?

回答

0

你可以只用

outputs.upToDateWhen { false } 

运行它总是或不使用型复制您的任务和

task copyFiles { 
    doLast { 
     copy { 
      from configurations.zips 
      into 'zip-dir' 
      configurations.zips.allDependencies.each { 
      rename "-${it.version}", '' 
      } 
     } 
    } 
} 

请注意,这是一个解决办法不是解决办法

+0

的确,您可以在'doLast'中使用'copy'命令而不是'Copy'任务,但这与禁用* UP-TO-DATE * - 检查此任务的方式相同。无论如何,这只会是解决方法,而不是一个真正的解决方案。 –

+0

@ lu.koerfer他询问了更好的解决方法,这是我过去这样做的方式,你知道解决方案吗?我在Gradle 2.3中遇到了这个问题 – LazerBanana

+0

我没有说它是一个糟糕的解决方法(但不一定比他的方法更好),这也是为什么我删除了downvote。 –

相关问题