2015-06-09 34 views
0

我正在嘗試使用JaCoCo代碼覆蓋率。我從Eclipse運行Liberty(使用Eclipse啓動器)。在jvm.options,我添加了這些線:(替補<位置>的路徑)在Eclipse中使用JaCoCo和Liberty Profile 8.5.5.4不會產生任何代碼覆蓋率

-Xshareclasses:none 
-javaagent:<location>/jacocoagent.jar=destfile=jacoco.exec,output=file,append=false,classdumpdir=./classdump 

然而,在運行測試後,我沒有看到任何覆蓋信息。看起來JaCoCo無法鏈接到我的Web應用程序war文件中的Java類。

是否有一個由擁有java類的liberty運行的不同進程?一個Java代理可以附加到該進程?

回答

1

您使用JaCoCo 0.7.3或更高版本?如果是,我懷疑問題是由issue #272中的更改引起的,因爲上次檢查時,WebSphere Liberty配置文件未定義具有CodeSource位置的類,因此JaCoCo中的這種啓發式會導致在WebSphere Liberty概要文件上運行的應用程序中的所有類都被忽略。如果您可以在最近的Liberty fixpak(MyClass.class.getProtectionDomain().getCodeSource().getLocation())上確認您的應用程序屬於這種情況,那麼我會建議您打開WebSphere RFE,JaCoCo issue或兩者。

+0

是的,我正在使用JaCoCo 0.7.6。我不明白你的意思是「最近的一些Liberty fixpak(MyClass.class.getProtectionDomain()。getCodeSource()。getLocation())」,請你詳細說明一下。 我也試過使用脫機工具,但沒有運氣也沒有(沒有生成jacoco.exec)。 – Anton

+1

您可以從http://wasdev.net/下載最新的測試版。您應該將這段代碼添加到應用程序中的某個類(例如,一個servlet)以查看它是否返回null;如果它爲空,那麼JaCoCo 0.7.3+將不起作用。也就是說,如果你不能讓線下儀器工作,那麼我真的不確定;只要使用脫機檢測類,它應該會導致JaCoCo運行時至少編寫一個空的jacoco.exec文件(包含所有缺省值,它將轉到與server.xml相同的目錄)。 –

+0

感謝您澄清空檢查的事情,我會試一試。關於脫機檢測,我可能錯誤地放置了一些參數或與JVM類路徑相關的東西(不要以爲WAS允許修改JVM類路徑,我不知道如何解決這個問題)。 WAS可以毫無錯誤地加載已插裝的類,這給了我希望:) – Anton

0

問題已解決。

不得不使用舊版JaCoCo(0.7.2)而不是最新版本(0.7.6)。

感謝bkail

+0

如果解決了問題,請接受我的回答(點擊答案旁邊的綠色複選標記)。如果不是IBM,我強烈建議您至少向JaCoCo報告此問題,因爲您不想無限期地繼續使用舊版JaCoCo。 –

相關問題