Gradle 和插件恶作剧,用于多模块构建

Gradle and Plugin shenanigans, for multi-module builds

所以我有一个多模块项目,它使用 gradle 构建了很多东西,包括一些 AWS Lambda、Java(Spring Boot)微服务和 ReactJS webapp .

为此,我想生成一些 Jacoco 代码覆盖率报告以掌握最新情况。所以目前我有这个:

subprojects {
    apply plugin: 'jacoco'

    plugins.withType(JavaPlugin) {
        jacoco {
            toolVersion = "0.8.5"
        }
    }
}

哪个“有效”。但是,如果我将其更改为:

subprojects {
    plugins.withType(JavaPlugin) {
        apply plugin: 'jacoco'

        jacoco {
            toolVersion = "0.8.5"
        }
    }
}

Gradle 在尝试构建第一个 Java 项目时失败 hard。我的意思是我真的不介意,您必须将 jacoco 插件应用于其中没有任何 Java 代码的子项目,这真的很奇怪。有人吗?

参见文档中的示例 3(仅在某些子项目上应用插件)https://docs.gradle.org/current/userguide/plugins.html

即在你的情况下:

plugins {
  id 'jacoco' version '1.0.0' apply false
}

subprojects {
  if (name.startsWith('myjacostuff')) {
    apply plugin: 'jacoco'
  }

  plugins.withType(JavaPlugin) {
    jacoco {
      toolVersion = "0.8.5"
    }
  }
}