我有一個包含一堆OSGI包的webapp。需要在部署的工件上運行自動化測試時生成cobertura代碼覆蓋率報告。 爲此,我使用cobertura提供了可部署的工件here 執行了所有必需的設置,並能夠生成工具類和相應的可部署工件「.war」。併成功地將它部署在野蠅中。 但是,在訪問應用程序並執行少量捕獲覆蓋操作之後,試圖停止服務器(jboss關閉掛鉤會調用所需的cobertura類並生成用於創建覆蓋率報告的cobertura.ser文件),並且此結果在以下例外嘗試調用cobertura儀器化類中的方法時拋出NoSuchMethodException
2015-02-09 17:46:06,420 SEVERE [net.sourceforge.cobertura.coveragedata.TouchCollector] (Thread-84) Cannot apply touches: java.lang.NoSuchMethodException: com.sample.package.SomeInstrumentedClass.__cobertura_classmap(net.sourceforge.cobertura.coveragedata.LightClassmapListener)
at java.lang.Class.getDeclaredMethod(Class.java:1994) [rt.jar:1.7.0_25]
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesToSingleClassOnProjectData(TouchCollector.java:125) [admin-rest-api-1.0.0.jar:1.0.0]
at net.sourceforge.cobertura.coveragedata.TouchCollector.applyTouchesOnProjectData(TouchCollector.java:107) [admin-rest-api-1.0.0.jar:1.0.0]
at net.sourceforge.cobertura.coveragedata.ProjectData.saveGlobalProjectData(ProjectData.java:270) [admin-rest-api-1.0.0.jar:1.0.0]
at net.sourceforge.cobertura.coveragedata.SaveTimer.run(SaveTimer.java:32) [admin-rest-api-1.0.0.jar:1.0.0]
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_25]
,拋出此異常的所有類的Cobertura試圖訪問。當我解壓展開的工件時,我可以看到所有的類都裝備了cobertura特定的代碼,並且所有工具類中都有具體的方法__cobertura_classmap
。無法確定爲什麼NoSuchMethodException
被拋出,儘管實際存在於已部署的工件中。
我使用的Cobertura-2.0.3,的Cobertura,Maven的插件-2.6和Java版本1.7.0_71和Apache菲利克斯
有沒有人遇到這個問題? OSGI與這種行爲有什麼關係?
如果您可以將您的示例上傳到某個地方,那可能會有很大幫助。根據這些信息,很難發現,您如何使用Felix來處理您的環境。 – 2015-02-10 12:52:55