我有一个具有多个独立项目的单一项目。
├── first-app
│ ├── adapters
│ ├── application
│ ├── build.gradle.kts
│ ├── public-events
│ ├── settings.gradle.kts
│ └── spring-boot-configuration
├── second-app
│ ├── adapters
│ ├── application
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── spring-boot-configuration
├── build-conventions
│ ├── build.gradle.kts
│ ├── settings.gradle.kts
│ └── src/...现在,我尝试通过将其提取到约定插件(到build-conventions独立项目,该项目通过includeBuild("../build-conventions")链接到每个应用程序)来共享一些常见的构建逻辑。
我在每个独立项目的根build.gradle.kts ((first|second)-app)中重复了以下代码:
plugins {
id("jacoco-report-aggregation")
}
reporting {
reports {
@Suppress("UnstableApiUsage")
val jacocoRootReport by registering(JacocoCoverageReport::class) {
testType.set(TestSuiteType.UNIT_TEST)
dependencies {
project.subprojects
.filter { it.plugins.findPlugin("jacoco") != null }
.forEach { jacocoAggregation(it) }
}
}
}
}如您所见,jacocoRootReport任务的注册还将每个具有jacoco插件的子模块添加到jacocoAggregation依赖项列表中(为了知道要检查哪个子项目以收集jacocoAggregation报告,jacocoRootReport任务需要这样做)。
上面的配置按照预期工作,直到我将jacoco聚合任务配置提取到常规插件jacoco-root-report-convention.gradle.kts中为止。
plugins {
id("jacoco-report-aggregation")
}
reporting {
reports {
@Suppress("UnstableApiUsage")
val jacocoRootReport by registering(JacocoCoverageReport::class) {
testType.set(TestSuiteType.UNIT_TEST)
dependencies {
project.subprojects
.filter { it.plugins.findPlugin("jacoco") != null }
.forEach { jacocoAggregation(it) }
}
}
}
}并尝试将其应用于我的项目的根,如下所示:
plugins {
id("jacoco-root-report-convention")
}现在没有生成根报告,因为.filter { it.plugins.findPlugin("jacoco") != null }找不到与给定谓词匹配的任何子项目。
问题在于,试图找到jacocoAggregation候选程序的时间早于配置子模块的时间。有办法建立正确的秩序吗?(首先配置子项目,然后执行任务注册代码)
发布于 2022-11-27 22:46:28
答案是简单地使用jacoco-root-report-convention语法在subprojects-block之后应用apply(plugin = "...")。示例:
plugins {
id("my-whatever-root-module-convention")
}
subprojects {
apply(plugin = "base-jvm-project-convention")
apply(plugin = "dependencies-convention")
}
apply(plugin = "aggregated-reporting-convention") // <--------在本例中,aggregated-reporting-convention将在配置subprojects之后应用。
https://stackoverflow.com/questions/73480744
复制相似问题