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