如何在Gradle Copy任务中仅对单个from源执行重命名操作?
Gradle Copy任务:仅对特定源执行重命名操作
我懂你遇到的这个坑——多源Copy任务里,全局的重命名规则会不小心作用到所有源,确实容易踩雷。其实只要把重命名逻辑限定在对应源的专属闭包里,就能完美解决问题。
正确实现代码
task dist(type: Copy) { // 仅对task1的输出文件执行重命名 from task1 { rename { filename -> filename.replace '-all.jar', '.jar' } } // 对task2的文件只做排除操作,不触发重命名 from task2 { exclude "lib" } into "${projectDir}/dist" }
为什么之前的写法无效?
你最初的代码里,rename是直接写在dist任务的根闭包里,属于全局配置项,会对所有from引入的源生效。而把rename放到from task1的子闭包里后,它就只会绑定task1产出的文件,完全不会影响task2的内容。
调整后效果:
task1生成的xxx-all.jar会被重命名为xxx.jartask2下的文件(除了lib目录)会原样复制到dist目录,不会触发任何重命名逻辑
内容的提问来源于stack exchange,提问作者Lixo Man
相关产品推荐
相关产品推荐

