我有一个Gradle插件,其中包含一些配置约定。
myplugin {
doSomethingOnBuild = true/false
}
在插件源代码中,我使用doSomethingOnBuild有条件地将任务(postProcessTask)添加到任务树。任务有条件的原因是postProcessTask仅对某种类型的构建是必需的。
projects.gradle.projectsEvaluated {
if(convention.doSomethingOnBuild == true) {
// add postProcessTask to tree using dependsOn
}
}
我觉得使用doSomethingOnBuild很奇怪,因为我需要将它包装在project.gradle.projectsEvaluated中,以便在配置阶段使用约定参数,并且gradle还警告我有关动态属性的使用(不推荐使用)
有更好的方法吗?我根本不应该这样做吗?用户是否可以调用postProcessTask?
答案 0 :(得分:1)
有条件地添加任务并不常见,但如果没有更多的上下文,我不能说我是否会选择这个或另一个解决方案(添加description
和group
任务,拆分成多个插件等)。在任何情况下,插件推迟对构建模型的访问都是正常的,而且通常是强制性的,gradle.projectsEvaluated
确实是一种方法。
关于“按需创建属性”的警告,这意味着有人在doSomethingOnBuild
项目上设置了名为:Test
的属性,尽管没有声明此类属性。这可能暗示插件存在问题,或者有人试图在应用插件之前设置属性。
如果您在严格的Gradle意义上引用约定对象,请注意它们已基本上被扩展对象替换。您可以在Gradle User Guide中详细了解有关扩展程序的信息。 (但这并不能解释弃用警告。)