【问题标题】:Gradle: Delete files from directory, based on FilelistGradle:从目录中删除文件,基于 Filelist
【发布时间】:2017-05-10 09:47:24
【问题描述】:

我目前正在尝试将我的旧 ant 系统迁移到 gradle。我对 gradle 还很陌生,还在学习,所以也许这是我忽略的一些微不足道的事情。

我有一个名为 delete.list 的文件,其中包含我要删除的文件列表。

这是我目前的代码:

task deleteLib(type:DeleteFiles) {    
    deleteList = file("${buildDir}/delete.list")
}



 class DeleteFiles extends DefaultTask {

    @SkipWhenEmpty
    @InputFile
    File deleteList

    DeleteFiles()
    {
        description = 'Deletes Libs from Integris zip'
    }

    @TaskAction
    void delete(){
        def lines = deleteList.readLines()
        lines.each {
            delete fileTree(dir: "${project.buildDir}", include: "${it}")
        }
    }
}

删除列表:

lib/java/activation.jar
lib/java/pdfbox*.jar
lib/java/fontbox*.jar
lib/java/xmpbox*.jar
lib/java/jempbox*.jar
lib/java/iText*.jar
lib/java/itext*.jar
lib/java/jakarta-poi.jar
lib/java/commons-net*.jar
lib/java/jfreechart*.jar
lib/java/jcommon*.jar
lib/java/dom4j*.jar
lib/java/xmlbeans*.jar
lib/java/jaxen*.jar
lib/java/avalon-framework*.jar
lib/java/batik-all*.jar

经过一番谷歌搜索后,我找到了这个解决方案,因为我的 _delete.list 可能在构建阶段不存在。

我现在的问题是,gradle好像是fileTree方法有问题:

* What went wrong:
Execution failed for task ':deleteLib'.
> Could not find method fileTree() for arguments [{dir=C:\entwicklung\Testumgebung\testProjectGradle\build, include=lib/java/activation.jar}] on task ':deleteLib' of type DeleteFiles.

有人知道我在这里缺少什么吗?

【问题讨论】:

    标签: gradle build build.gradle


    【解决方案1】:

    由于这两个方法都在 Project 上定义,并且 groovy 查找任务中定义的方法,您需要显式调用 project 实例上的方法:

    project.with {
       delete fileTree(dir: "${project.buildDir}", include: "${it}")
    }
    

    【讨论】:

    • 我仍然不确定这是如何工作的(我想我又回到了阅读 gradle doc),但它解决了我的问题。非常感谢。
    猜你喜欢
    • 2011-03-09
    • 2015-03-28
    • 2016-09-29
    • 2013-06-01
    • 2020-12-22
    • 2013-02-14
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多