gpt4 book ai didi

spring - 为什么 Cobertura 不能在我的 Spring/Hibernate Webapp 中工作?

转载 作者:行者123 更新时间:2023-11-28 22:31:42 25 4
gpt4 key购买 nike

我想在我的 Web 应用程序中使用 Cobertura 代码覆盖率记录,但无法让它工作。我怀疑,问题是 Spring 或 Hibernate 与 Cobertura 之间存在一些冲突,因为这三者都使用 ASM 库来进行字节码操作。

我做了以下事情:

  • 我使用 Cobertura Ant 任务在“WEB-INF/lib”中检测我的 jar 并生成了“cobertura.ser”文件
  • 我将“cobertura.jar”添加到“WEB-INF/lib”
  • 我启动 tomcat 以提供 cobertura 文件位置 (net.sourceforge.cobertura.datafile=cobertura.ser)

当我启动 Tomcat 时,在初始化 Spring 上下文时收到以下错误消息:

java.lang.NoSuchMethodException: com.foo.MyClass.setInstance($Proxy28)
at com.foo.common.runtime.spring.PluginInjector.findBestMatchingMethod(PluginInjector.java:252)
at com.foo.common.runtime.spring.PluginInjector.invokeMethod(PluginInjector.java:198)
at com.foo.common.runtime.spring.PluginInjector.afterPropertiesSet(PluginInjector.java:174)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)

我已经知道,cobertura 附带的 asm.jar 不应该在类路径中,因此我只将 cobertura.jar 复制到 WEB-INF\lib。

此外,我也试过 Emma 并且有效。然而,cobertura 看起来更现代、更活跃(最后一次更新是 2010 年而不是 2005 年)并且生成更好的报告,所以我更喜欢它而不是 Emma。

最佳答案

我必须进行两项更改才能使其正常工作:

  1. 我必须在 Spring 配置中设置 proxy-target-class="true",因此 Spring 使用 CGLIB 生成代理而不是使用 JDK 动态代理(参见 Spring Proxying mechanisms ) .

  2. 我必须设置 JVM 参数 -XX:-UseSplitVerifier,这会导致 JVM 使用旧的字节码 validator 。这似乎是必要的,因为 Cobertura 的字节码操作与 Java 7 不兼容。

关于spring - 为什么 Cobertura 不能在我的 Spring/Hibernate Webapp 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14691985/

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