gpt4 book ai didi

gradle - 为什么Gradle + Jacoco会抛出与JAXB类有关的异常?

转载 作者:行者123 更新时间:2023-12-03 03:21:18 26 4
gpt4 key购买 nike

我是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

最佳答案

我没有适合您的解决方案,但是您的代码正在发生麻烦。 Jacoco将字段和方法动态地插入您的类中,并使用它们来跟踪覆盖率指标。如果您的代码使用反射,则可能会出现问题,因为jacoco的字段是在反射调用中返回的-除非您明确地将其过滤掉。 Jacoco FAQs这样说:

My code uses reflection. Why does it fail when I execute it with JaCoCo?

To collect execution data JaCoCo instruments the classes under test which adds two members to the classes: A private static field $jacocoData and a private static method $jacocoInit(). Both members are marked as synthetic.

Please change your code to ignore synthetic members. This is a good practice anyways as also the Java compiler creates synthetic members in certain situation.


现在,对javolution知之甚少,我不确定它是否允许在要拾取的字段上应用过滤器,但这就是我要寻找的地方。
另外,您可以从jacoco中排除问题类别/程序包,但要注意的是,您将不会测量排除类别/程序包的测试覆盖率。

关于gradle - 为什么Gradle + Jacoco会抛出与JAXB类有关的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com