2015-09-10 74 views
1

我正在研究關於開展的Cobertura代碼覆蓋在運行一個Java Web應用程序,我讀到一篇文章,http://www.mojohaus.org/cobertura-maven-plugin/instrumentingDeploymentArtifact.html的Cobertura運行時覆蓋

我遵循的步驟,並能得到一個小覆蓋報告maven web應用程序,我在JBoss服務器上部署了一個war文件(包含單個模塊),並手動瀏覽已部署的應用程序。

現在,當我遵循相同的程序和步驟爲更大的應用程序,我們需要在相同的安裝程序上部署ear文件(包含多個模塊的war文件),然後手動打開應用程序服務,但我無法得到它的任何保險。最初創建一個空的cobertura.ser文件,但它不會被更新。

如果在使用ear/war或其他任何需要在JBoss服務器中配置的問題請讓我知道。

預先感謝

回答

1

爲的Cobertura一種已知的條件是,它JVM關機期間寫入代碼覆蓋率,即,它註冊一個關閉掛鉤,和轉儲信息到在該時刻的文件。 問題是,在大多數關閉鉤子可以執行之前,JBoss通常會暫停JVM,並影響Cobertura。 看到這個常見問題:使用

-Djboss.shutdown.forceHalt=false 

現在,另一種常見的解決辦法是將CoberturaFlush.war(發行版的一部分)納入你的EAR I'm using JBoss. When I stop the server, the coverage data file is not written.

的常見問題建議,並調用一個特殊的網址,將使Cobertura運行時將其數據轉儲到文件中。你想關閉你的服務器/應用程序之前,調用該URL,通常是http://HOST:PORT/coberturaFlush/flushCobertura

最後一兩件事:數據文件將默認情況下在工作目錄中生成,因此它往往是更安全顯式地強制一個文件路徑名:

-Dnet.sourceforge.cobertura.datafile=[absolute file path] 

在你的情況下,就必須加入到JBoss的啓動參數(如run.conf)

+0

關停JBoss服務器我得到下面的錯誤。 10:45:58,693 ERROR [stderr](線程-67)線程「Thread-67」中的異常java.lang.IllegalAccessError:嘗試訪問類net.sourceforge.cobertura.coveragedata.TouchCollector $ netToolCollector $ ApplyToClassDataLightClassmapListener net.sourceforge .cobertura.coveragedata.TouchCollector 我正在使用cobertura-2.1.1.jar – Ayush

+0

您試過兩種選擇中的哪一種?如果前者,JBoss類卸載可能會阻礙,例如,如果您的cobertura jar包含在EAR中,那麼它將被取消部署,並且在關閉掛鉤之前卸載類(或同時發生)。 WAR解決方案在這種情況下可能會更好,或者嘗試將Cobertura運行時jar放在jboss/server/main/lib /文件夾中。 –

+0

我能夠通過將cobertura jar降級到cobertura-2.0.3.jar來刪除討論的錯誤。 現在,除了我無法收集覆蓋率數據外,所有步驟都正常工作。我甚至嘗試了-Djboss.shutdown.forceHalt = false以及http:// HOST:PORT/coberturaFlush/flushCobertura,但沒有一個步驟成功。 – Ayush