我试图使我的任务zipGui
在构建目标上执行,但是似乎能够执行任务的唯一方法是从任务定义中删除(type: Zip)
。
此代码段根本无法执行zipGui
任务:
task zipGui(type: Zip) {
doFirst {
println "==================== Zipping GUI components"
}
doLast {
FileTree zip = zipTree('assets/htdocs/gui.zip')
from 'assets/htdocs'
}
}
build.dependsOn zipGui
这会执行zipGui
,但对如何压缩文件一无所知:
task zipGui {
doFirst {
println "==================== Zipping GUI components"
}
doLast {
FileTree zip = zipTree('assets/htdocs/gui.zip')
from 'assets/htdocs'
}
}
build.dependsOn zipGui
这是整个build.gradle
的一部分。
如何让zipGui
作为构建的依赖项执行?
编辑:以下是 real build.gradle
的更多内容,无需我将内容剥离出来以简化问题:
task copyCert(type: Copy) {
from '../../../install'
into 'assets/certs/root'
include 'ca.pem'
doFirst {
println "==================== Copying root cert into assets"
}
}
task copyGui(dependsOn: copyCert, type: Copy) {
from '../../web/gui'
into 'assets/htdocs'
include '**/*.html'
include '**/*.css'
include '**/*.js'
include '**/*.wav'
include '**/*.tmpl'
include '**/*.png'
include '**/*.gif'
include '**/*.jpg'
exclude '**/*.DS_Store'
exclude '**/.gitignore'
exclude '**/.thumb'
exclude '**/build'
doFirst {
println "==================== Copying gui components into assets"
}
}
task zipGui(dependsOn: copyGui, type: Zip) {
FileTree zip = zipTree('assets/htdocs/gui.zip')
from 'assets/htdocs'
doFirst {
println "==================== Zipping GUI components"
}
}
答案 0 :(得分:1)
在此处检查zip任务的详细信息:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html
task zipGui(type: Zip) {
archiveName = 'gui.zip'
from("$projectDir/../../../install") {
into 'assets/certs/root'
include 'ca.pem'
}
from("$projectDir/../../web/gui"){
into 'assets/htdocs'
exclude '**/*.DS_Store'
exclude '**/.gitignore'
exclude '**/.thumb'
exclude '**/build'
} // Just include or exclude is enough here as you indicated.
destinationDir(file("$buildDir/libs"))
}
答案 1 :(得分:0)
您的任务完全无关。
Gradle任务只有在有事情要做的情况下才会执行。如果无事可做(例如,没有要压缩的文件),则跳过任务。与任务无关的原因有多种。主要原因是最新的检查,以防止Gradle执行上次调用时所做的相同的事情,至少在任务输出仍然可用并且任务输入没有更改的情况下。
但是,在您的特定情况下,该任务无关紧要,因为在任务执行时,根本没有指定输入文件。您可以通过from
添加要包含在zip文件中的文件。但是,您可以在doLast
闭包内使用它,该闭包在执行任务操作(发生压缩的位置)之后执行。因此,在运行zip进程时,未进行配置。
您可以使用任务的常规配置闭包,甚至可以使用doFirst
闭包来配置任务:
task zipGui(type: Zip) {
from 'assets/htdocs'
}
// OR
task zipGui(type: Zip) {
doFirst {
from 'assets/htdocs'
}
}
更多说明:
FileTree zip = zipTree('assets/htdocs/gui.zip')
行绝对不执行任何操作,因为不查询创建的文件树。您需要手动访问文件树的文件,或者将其传递给任务,例如您的压缩任务:from zipTree('assets/htdocs/gui.zip')
from
方法。--console=plain
。参数-d
和--stacktrace
/ --full-stacktrace
可用于获取有关错误的更多信息。