WebアプリケーションでCoberturaコードカバレッジ記録を使用したいのですが、機能させることができません。3つすべてがASMlibを使用してバイトコード操作を行うため、問題はSpringまたはHibernateとCoberturaの間の競合であると思われます。
私は次のことをしました:
- CoberturaAntタスクを使用してjarを「WEB-INF/lib」にインストルメントし、「cobertura.ser」ファイルを生成しました
- 「WEB-INF/lib」に「cobertura.jar」を追加しました
- 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にコピーしただけです。
その上、私もエマを試しました、そしてそれは働きました。ただし、coberturaはより現代的でアクティブに見え(2005年ではなく2010年からの最終更新)、より良いレポートを生成するので、Emmaよりも好むでしょう。