Jacoco仪器化错误,针对Kotlin数据类文件

huangapple go评论114阅读模式
英文:

Jacoco instrumentation error for Kotlin data class files

问题

我有一个Kotlin项目,目前在构建时显示了许多关于Jacoco的错误堆栈跟踪。通过更多的调查,我发现其中许多与数据类有关。例如对于类似以下的代码:

  1. data class FooDTO(val a: String, val b: String)

我得到类似以下的错误信息:

  1. java.lang.instrument.IllegalClassFormatException: Error while instrumenting path/to/FooDtoMethodAccess with JaCoCo 0.8.10.202304240956/8ea9668.
  2. ...

这是我的jacoco插件配置:

  1. <plugin>
  2. <groupId>org.jacoco</groupId>
  3. <artifactId>jacoco-maven-plugin</artifactId>
  4. <version>0.8.10</version>
  5. <executions>
  6. <execution>
  7. <id>default-prepare-agent</id>
  8. <goals>
  9. <goal>prepare-agent</goal>
  10. </goals>
  11. </execution>
  12. <execution>
  13. <id>default-report</id>
  14. <phase>prepare-package</phase>
  15. <goals>
  16. <goal>report</goal>
  17. </goals>
  18. </execution>
  19. </executions>
  20. </plugin>

如何摆脱这些错误消息?

英文:

I have a kotlin project that currently in the build time is showing a lot of error stack traces regarding Jacoco. By more investigation I found that a lot of them are regarding data classes. For example for something like:

  1. data class FooDTO(val a: String, val b: String)

I am getting something like:

  1. java.lang.instrument.IllegalClassFormatException: Error while instrumenting path/to/FooDtoMethodAccess with JaCoCo 0.8.10.202304240956/8ea9668.
  2. at org.jacoco.agent.rt.internal_4a7f17c.CoverageTransformer.transform(CoverageTransformer.java:94)
  3. at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
  4. at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
  5. at java.lang.ClassLoader.defineClass1(Native Method)
  6. at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
  7. at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
  8. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  9. at java.lang.reflect.Method.invoke(Method.java:498)
  10. at com.esotericsoftware.reflectasm.AccessClassLoader.defineClass(AccessClassLoader.java:73)
  11. at com.esotericsoftware.reflectasm.AccessClassLoader.defineAccessClass(AccessClassLoader.java:57)
  12. at com.esotericsoftware.reflectasm.MethodAccess.get(MethodAccess.java:276)
  13. at com.coxautodev.graphql.tools.MethodFieldResolverDataFetcher.&lt;init&gt;(MethodFieldResolver.kt:131)
  14. at com.coxautodev.graphql.tools.MethodFieldResolver.createDataFetcher(MethodFieldResolver.kt:98)
  15. at com.coxautodev.graphql.tools.SchemaParser$createObject$$inlined$forEach$lambda$1.apply(SchemaParser.kt:126)
  16. at com.coxautodev.graphql.tools.SchemaParser$createObject$$inlined$forEach$lambda$1.apply(SchemaParser.kt:46)
  17. at graphql.schema.GraphQLObjectType$Builder.field(GraphQLObjectType.java:207)
  18. at com.coxautodev.graphql.tools.SchemaParser.createObject(SchemaParser.kt:124)
  19. at com.coxautodev.graphql.tools.SchemaParser.parseSchemaObjects(SchemaParser.kt:85)
  20. at com.coxautodev.graphql.tools.SchemaParser.makeExecutableSchema(SchemaParser.kt:109)
  21. at com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration.graphQLSchema(GraphQLJavaToolsAutoConfiguration.java:65)
  22. at com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$6059daa9.CGLIB$graphQLSchema$0(&lt;generated&gt;)
  23. at com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$6059daa9$$FastClassBySpringCGLIB$$8a2c10eb.invoke(&lt;generated&gt;)
  24. at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
  25. at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331)
  26. 06/07/2023 13:10:02 at com.oembedler.moon.graphql.boot.GraphQLJavaToolsAutoConfiguration$$EnhancerBySpringCGLIB$$6059daa9.graphQLSchema(&lt;generated&gt;)
  27. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  28. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  29. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  30. at java.lang.reflect.Method.invoke(Method.java:498)
  31. at

This is my jacoco plugine configuration:

  1. &lt;plugin&gt;
  2. &lt;groupId&gt;org.jacoco&lt;/groupId&gt;
  3. &lt;artifactId&gt;jacoco-maven-plugin&lt;/artifactId&gt;
  4. &lt;version&gt;0.8.10&lt;/version&gt;
  5. &lt;executions&gt;
  6. &lt;execution&gt;
  7. &lt;id&gt;default-prepare-agent&lt;/id&gt;
  8. &lt;goals&gt;
  9. &lt;goal&gt;prepare-agent&lt;/goal&gt;
  10. &lt;/goals&gt;
  11. &lt;/execution&gt;
  12. &lt;execution&gt;
  13. &lt;id&gt;default-report&lt;/id&gt;
  14. &lt;phase&gt;prepare-package&lt;/phase&gt;
  15. &lt;goals&gt;
  16. &lt;goal&gt;report&lt;/goal&gt;
  17. &lt;/goals&gt;
  18. &lt;/execution&gt;
  19. &lt;/executions&gt;
  20. &lt;/plugin&gt;

How can I get rid of those error messages?

答案1

得分: 0

所以我发现了问题所在。这些文件并不是确切的数据类,而是可能由GraphQL自动生成的,名称以MethodAccess结尾。要摆脱它们,您可以轻松地从Jacoco中排除它们:

  1. <execution>
  2. <id>default-prepare-agent</id>
  3. <goals>
  4. <goal>prepare-agent</goal>
  5. </goals>
  6. <configuration>
  7. <excludes>
  8. <exclude>*MethodAccess</exclude>
  9. </excludes>
  10. </configuration>
  11. </execution>
英文:

So I found out what is the problem. These files are not exactly data classes, but they are auto generated probably by graphQL and the names ends with MethodAccess. To get rid of it you can easily exclude them from Jacoco:

  1. &lt;execution&gt;
  2. &lt;id&gt;default-prepare-agent&lt;/id&gt;
  3. &lt;goals&gt;
  4. &lt;goal&gt;prepare-agent&lt;/goal&gt;
  5. &lt;/goals&gt;
  6. &lt;configuration&gt;
  7. &lt;excludes&gt;
  8. &lt;exclude&gt;*MethodAccess&lt;/exclude&gt;
  9. &lt;/excludes&gt;
  10. &lt;/configuration&gt;
  11. &lt;/execution&gt;

huangapple
  • 本文由 发表于 2023年7月6日 22:25:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/76629862.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定