Build 清理任务不清理指定的outputs.file

Build 清理任务不清理指定的outputs.file,build,gradle,resource-cleanup,Build,Gradle,Resource Cleanup,我编写了一个build.gradle脚本,从给定的URL自动下载hazelcast。之后,文件被解压,目标目录中只保留mancenter.war以及源zip文件。稍后,将引用此war文件进行jetty运行 尽管如此,尽管我为两个任务定义了outputs.file,但在执行gradle clean时,这些文件不会被清理。因此,我想知道当我执行gradle clean时,我必须做什么才能删除下载和解压缩的文件。这是我的剧本: 顺便说一句,如果你有任何建议如何提高脚本,请不要犹豫告诉我 apply p

我编写了一个build.gradle脚本,从给定的URL自动下载hazelcast。之后,文件被解压,目标目录中只保留mancenter.war以及源zip文件。稍后,将引用此war文件进行jetty运行

尽管如此,尽管我为两个任务定义了outputs.file,但在执行gradle clean时,这些文件不会被清理。因此,我想知道当我执行gradle clean时,我必须做什么才能删除下载和解压缩的文件。这是我的剧本:

顺便说一句,如果你有任何建议如何提高脚本,请不要犹豫告诉我

apply plugin: "application"

dependencies {
    compile "org.eclipse.jetty:jetty-webapp:${jettyVersion}"
    compile "org.eclipse.jetty:jetty-jsp:${jettyVersion}"
}

ext {
    distDir = "${projectDir}/dist"

    downloadUrl = "http://download.hazelcast.com/download.jsp?version=hazelcast-${hazelcastVersion}"
    zipFilePath = "${distDir}/hazelcast-${hazelcastVersion}.zip"
    warFilePath = "${distDir}/mancenter-${hazelcastVersion}.war"

    mainClass = "mancenter.MancenterBootstrap"
}

task downloadZip() {
    outputs.file file(zipFilePath)
    logging.setLevel(LogLevel.INFO)
    doLast {
        ant.get(src: downloadUrl, dest: zipFilePath)
    }
}

task extractWar(dependsOn: downloadZip) {
    outputs.file file(warFilePath)
    logging.setLevel(LogLevel.INFO)
    doLast {
        ant.unzip(src: zipFilePath, dest: distDir, overwrite:"true") {
            patternset( ) {
                include( name: '**/mancenter*.war' )
            }
            mapper(type:"flatten")
        }
    }
}

task startMancenter(dependsOn: extractWar, type: JavaExec) {
    main mainClass
    classpath = sourceSets.main.runtimeClasspath
    args warFilePath
}
更新

我发现了这个,它描述了如何在调用clean任务时提供要删除的其他位置。基本上你可以这样做:

clean{
    delete zipFilePath
    delete warFilePath
}

我从源代码中得到确认,clean任务只是删除构建目录。它假定您希望清理所有内容,并且所有任务输出都位于该构建目录中的某个位置


因此,最简单和最好的做法是只将输出存储在build目录下的某个位置。

您可以像这样添加要清理的任务:

clean.dependsOn(cleanExtractWar)
clean.dependsOn(cleanDownloadZip)

cleanTaskName是一个虚拟任务,它将清除TaskName的所有输出。

AFAIK,clean任务只会删除生成目录。您应该将所有输出存储在此生成目录下。很好的提示,谢谢!我会试试的。现在有办法指定额外的资源进行清理了吗?我认为你的最简单和最佳实践是正确的。尽管如此,我还是会采用我在更新的问题中所述的方法。这将在配置阶段删除,而不是在执行阶段删除。它应该是
clean,我认为配置阶段是正确的,因为您并没有真正删除文件,只是指定它们供以后删除。gradle devs也是这样说的,这对我也很有效。我的错,你是对的。我忽略了一个事实,即Delete任务有一个Delete()方法,该方法在这里调用,而不是Project.Delete()方法,该方法具有相同的签名,但会立即删除文件。