In order to temporarily workaround a limitation on the jacoco plugin (without patching it), I’d like to redefine a method this way
task jacocoReport(type: JacocoReport) {
…
doFirst {
def oldMethod = it.metaClass.getClassDirs
it.metaClass.getClassDirs = { ->
oldMethod.filter {!it.name.endsWith (’.jar’)}
}
}
…
I’m afraid this kind of meta programming somewhat hurts some gradle internals, cause it seems that the original method is redefined with my closure, but then it fails complaining
org.gradle.api.internal.MissingMethodException: Could not find method structure() for arguments [{name=TEST}, org.ajoberstar.gradle.jacoco.tasks.JacocoReport$_generate_closure1_closure8@13da177] on task ':TEST:jacocoReport'.
at org.gradle.api.internal.AbstractDynamicObject.methodMissingException(AbstractDynamicObject.java:68)
at org.gradle.api.internal.AbstractDynamicObject.invokeMethod(AbstractDynamicObject.java:56)
at org.gradle.api.internal.CompositeDynamicObject.invokeMethod(CompositeDynamicObject.java:172)
at org.ajoberstar.gradle.jacoco.tasks.JacocoReport_Decorated.invokeMethod(Unknown Source)
at org.ajoberstar.gradle.jacoco.tasks.JacocoReport$_generate_closure1.doCall(JacocoReport.groovy:62)
at org.ajoberstar.gradle.jacoco.tasks.JacocoReport$_generate_closure1.doCall(JacocoReport.groovy)
at org.gradle.api.internal.project.ant.BasicAntBuilder.doInvokeMethod(BasicAntBuilder.java:86)
at org.gradle.api.internal.project.DefaultAntBuilder.super$3$invokeMethod(DefaultAntBuilder.groovy)
at org.gradle.api.internal.project.DefaultAntBuilder.invokeMethod(DefaultAntBuilder.groovy:37)
at org.ajoberstar.gradle.jacoco.tasks.JacocoReport.generate(JacocoReport.groovy:58)
at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.invokeMethod(BeanDynamicObject.java:216)
at org.gradle.api.internal.BeanDynamicObject.invokeMethod(BeanDynamicObject.java:122)