清理任务不会清除指定的outputs.file

u6f*_*f6o 3 build resource-cleanup gradle

我编写了一个build.gradle脚本来自动从给定的URL下载hazelcast.之后文件被解压缩,只有mancenter.war和origin zip文件保留在目标目录中.稍后在这个war文件被引用为jetty run.

尽管如此,虽然我为我的两个任务定义了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
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我找到了这个链接,它描述了在调用clean任务时如何提供删除的其他位置.基本上你可以做某事.像这样:

clean{
    delete zipFilePath
    delete warFilePath
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

我从源代码中得到确认,clean任务只是删除了build目录.它假定您要清理所有内容,并且所有任务输出都在此构建目录中的某个位置.

因此,最简单和最好的做法是仅在构建目录下的某处存储输出.

  • 我认为配置阶段是正确的阶段,因为你没有真正删除文件,只是指定它们以便以后删除.gradle开发人员也说这样,它对我也有用. (2认同)