我是刚认识Jacoco的我才刚接上Gradle。
因此,在子项目中,我只有:
apply plugin: jacoco当我运行gradle test时,我得到:
Caused by: javax.xml.bind.JAXBException: An Error Occurred While Scanning Context Classes!
- with linked exception:
[java.lang.NoSuchMethodException: Failed to Locate Method for Element, Name = $jacocoData, MethodName = set$jacocoData, Type = class com.someco.components.thing.stuff.Feedback, Argument Type = class [Z]
at javolution.xml.internal.annotation.JAXBAnnotatedObjectReaderImpl.<init>(JAXBAnnotatedObjectReaderImpl.java:98)
at javolution.xml.internal.annotation.JAXBAnnotationFactoryImpl.createJAXBAnnotatedObjectReader(JAXBAnnotationFactoryImpl.java:31)
at com.someco.commons.util.JaxbUtils.unmarshal(JaxbUtils.java:112)
... 47 more
Caused by: java.lang.NoSuchMethodException: Failed to Locate Method for Element, Name = $jacocoData, MethodName = set$jacocoData, Type = class com.someco.components.thing.stuff.Feedback, Argument Type = class [Z
at javolution.xml.internal.annotation.AbstractJAXBAnnotatedObjectParser.getMethodByXmlName(AbstractJAXBAnnotatedObjectParser.java:533)
at javolution.xml.internal.annotation.AbstractJAXBAnnotatedObjectParser.scanClass(AbstractJAXBAnnotatedObjectParser.java:281)
at javolution.xml.internal.annotation.AbstractJAXBAnnotatedObjectParser.registerContextClasses(AbstractJAXBAnnotatedObjectParser.java:149)
at javolution.xml.internal.annotation.AbstractJAXBAnnotatedObjectParser.registerContextClasses(AbstractJAXBAnnotatedObjectParser.java:143)
at javolution.xml.internal.annotation.AbstractJAXBAnnotatedObjectParser.registerContextClasses(AbstractJAXBAnnotatedObjectParser.java:143)
at javolution.xml.internal.annotation.JAXBAnnotatedObjectReaderImpl.<init>(JAXBAnnotatedObjectReaderImpl.java:93)
... 49 more发布于 2016-04-27 19:40:46
所以你需要2不包括在内。一个用于汇编,另一个用于报告。要解决这个特定的问题,您所需要的就是:
test {
jacoco {
excludes = [ "com.stuff.ours.jaxb.stuff.*",
"javolution.*"]
}
}发布于 2016-04-22 15:19:06
我没有为您提供解决方案,但是您的代码发生了什么变化。Jacoco动态地将字段和方法插入到类中,并使用它们来跟踪覆盖度量。如果您的代码使用反射,这可能是一个问题,因为jacoco的字段是在反射调用中返回的--除非您显式地将它们过滤掉。Jacoco常见问题说:
我的代码使用反射。为什么当我用JaCoCo?执行它时,它会失败? 为了收集执行数据,JaCoCo对被测试的类进行测试,这将向类添加两个成员:私有静态字段$jacocoData和私有静态方法$jacocoInit()。两个成员都被标记为合成的。 请更改您的代码以忽略合成成员。这是一个很好的实践,因为Java编译器在某些情况下也会创建合成成员。
现在,我不确定它是否允许在接收到的字段上应用过滤器,但这是我开始寻找的地方。
或者,您可以从jacoco中排除问题类/包,但请注意,您将不会度量排除在外的类/包的测试覆盖率。
https://stackoverflow.com/questions/36796828
复制相似问题