@@ -39,6 +39,58 @@ subprojects {
3939 }
4040}
4141
42+ tasks.named<JacocoReport >(" testCodeCoverageReport" ) {
43+ val objectFactory = project.objects
44+ val exclusions = listOf (
45+ // Spring Boot @SpringBootApplication entry points and inner classes
46+ " **/*Application.class" ,
47+ " **/*Application$*.class" ,
48+
49+ // Spring Boot AOT / GraalVM generated classes (if AOT is run)
50+ " **/*__BeanDefinitions*.class" ,
51+ " **/*__Autowiring*.class" ,
52+ " **/*__ApplicationContextInitializer*.class" ,
53+
54+ // jOOQ generated catalog, schema, keys, and table records in :jooq
55+ " zin/rashidi/boot/jooq/DefaultCatalog.class" ,
56+ " zin/rashidi/boot/jooq/DefaultSchema.class" ,
57+ " zin/rashidi/boot/jooq/Indexes.class" ,
58+ " zin/rashidi/boot/jooq/Keys.class" ,
59+ " zin/rashidi/boot/jooq/Tables.class" ,
60+ " zin/rashidi/boot/jooq/tables/**"
61+ )
62+ val defaultClassDirs = objectFactory.fileCollection().from(classDirectories.from.toList())
63+
64+ classDirectories.setFrom(
65+ defaultClassDirs.elements.map { locations ->
66+ locations.map { location ->
67+ objectFactory.fileTree().from(location.asFile).matching {
68+ exclude(exclusions)
69+ }
70+ }
71+ }
72+ )
73+ }
74+
75+ tasks.register<JacocoCoverageVerification >(" testCodeCoverageVerification" ) {
76+ val reportTask = tasks.named<JacocoReport >(" testCodeCoverageReport" ).get()
77+ dependsOn(reportTask)
78+
79+ executionData.setFrom(reportTask.executionData)
80+ classDirectories.setFrom(reportTask.classDirectories)
81+ sourceDirectories.setFrom(reportTask.sourceDirectories)
82+
83+ violationRules {
84+ rule {
85+ limit {
86+ counter = " INSTRUCTION"
87+ minimum = " 0.80" .toBigDecimal()
88+ }
89+ }
90+ }
91+ }
92+
4293tasks.check {
4394 dependsOn(tasks.named<JacocoReport >(" testCodeCoverageReport" ))
44- }
95+ dependsOn(tasks.named<JacocoCoverageVerification >(" testCodeCoverageVerification" ))
96+ }
0 commit comments