在自定义gradle插件中,如何添加任务取决于其他插件中定义的任务?

时间:2018-12-05 08:36:23

标签: gradle plugins

例如,我有一个插件: 公共类PluginA实现了插件。

,我将创建一个任务 taskA 。现在我要设置: taskA.dependsOn taskB ,但是taskB是在PluginB中定义的。

是否可以做到这一点?

1 个答案:

答案 0 :(得分:0)

您不必知道taskB来自PluginB来创建对taskA的依赖关系:您只需按其名称引用taskB,如下所示:

class PluginA implements Plugin<Project> {
    void apply(Project project) {

        Task taskA = project.task('taskA') {
            doLast {
                println 'Executing task A from plugin A'
            }
        }
        // create dependency from taskA to taskB
        project.tasks.matching { it.name == 'taskB'}.each {
            taskA.dependsOn it
        }
    }
}

请注意,如果您应用PluginA的使用项目不应用PluginB,则不会创建依赖项。可能/您希望/需要在应用PluginB时自动应用PluginA

另一种方法是仅在使用pluginManager.withPlugin方法应用pluginB时创建此依赖项:

class PluginA implements Plugin<Project> {
    void apply(Project project) {

        Task taskA = project.task('taskA') {
            doLast {
                println 'Executing task A from plugin A'
            }
        }
        project.pluginManager.withPlugin('pluginB'){                
            println "pluginB applied => adding dependency from taskA to taskB"
            project.afterEvaluate{
                taskA.dependsOn project.tasks.getByName('taskB')
            }
        }
    }
}