我想创建一个简单的同步任务,根据构建类型(例如调试/发布)稍微改变它的行为,我在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()
}
}
是否有可能
>在除了whenReady之外的其他地方检测/设置一些构建属性
>将同步任务工作移至doLast
>或者至少有一些同步任务的快捷方式(.execute()看起来很难看)
最佳答案 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)如前所述,缺少同步任务快捷方式不应该那么痛苦