Gradle and Plugin shenanigans,用于多模块构建

问题描述

所以我有一个多模块项目,该项目使用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代码的子项目,这真的很奇怪。有人吗?

解决方法

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

即在您的情况下:

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"
    }
  }
}