我想创建一个简单的同步任务,根据构建类型(例如调试/发布)稍微改变它的行为,我在gradle.taskGraph.whenReady中使用布尔变量'dummy'decrared:
gradle.taskGraph.whenReady {taskGraph ->
dummy = false
if (taskGraph.hasTask(':dummybuild')) {
dummy = true
}
}
问题是通过以下方式配置的任务具有配置范围,即在whenReady之前,因此它无法访问'dummy'变量:
task copySkins(type: Sync) {
from skinsFrom
into skinsInto
rename skinsRename
exclude symbianExclude
if (!dummy) exclude dummyExclude
}
现在我正在使用此解决方法
task copySkins {
inputs.dir skinsFrom
outputs.dir skinsInto
doLast {
task skins(type: Sync) {
from skinsFrom
into skinsInto
rename skinsRename
exclude symbianExclude
if (!dummy) exclude dummyExclude
}
skins.execute()
}
}
是否可以
答案 0 :(得分:2)
1)whenReady
事件允许用户访问完全初始化的任务图:完成所有初始化并准备好运行任务。当您需要在此处检测/设置构建属性时,唯一的情况是需要内省当前构建设置。
如果您不需要此信息,可以将初始化放在构建脚本中的任何位置。最后,它只不过是时髦的剧本。
apply plugin: 'java' def now = new Date() compileJava.doFirst { println "It is ${now}. We are starting to compile" }
2)您无法将同步任务工作移至doLast。但你可以随时将你的行动添加到doFirst;)我认为,这应该有效:
task copySkins(type: Sync) { from skinsFrom into skinsInto rename skinsRename exclude symbianExclude doFirst { if (!dummy) exclude dummyExclude } }
3)如前所述,缺少同步任务快捷方式不应该那么痛苦