Gradle - 根据插件存在配置子项目

时间:2017-08-29 12:54:02

标签: gradle plugins subproject

我正在与一个相当简单的gradle问题作斗争但是尽管搜索我找不到解决方案。 非常简单,在多项目构建中,我需要根据它们加载的插件配置一些子项目。所以 如果子项目有插件'war'或'ear'这样做.. 我没有成功尝试以下内容:

subprojects {
    if (it.plugins.hasPlugin('war') || (it.plugins.hasPlugin('ear') {
        apply plugin: 'my super special plugin'
        ....
        ....
    }
}

上面从不应用插件:'我的超级特殊插件'

有什么建议吗? 感谢

1 个答案:

答案 0 :(得分:2)

Gradle在从子项目评估build.gradle之前执行subprojects闭包。因此,目前没有关于来自build.gradle的插件的信息。 要在评估subproject/build.gradle后执行某些代码,您应该使用ProjectEvaluationListener。 例如:

subprojects {
    afterEvaluate {
      if (it.plugins.hasPlugin('war') || (it.plugins.hasPlugin('ear') {
          it.plugins.apply 'my super special plugin'
          ....
          ....
      }
    }
}

另请注意it.plugins.apply 'my super special plugin'而不是apply plugin: 'my super special plugin'

另一种选择是使用共享common.gradle来配置子项目。通过在适当的位置使用subproject/build.gradle,此共享gradle文件可能会包含在apply from: '../common.gradle'中。