在Eclipse中使用JaCoCo和Liberty Profile 8.5.5.4不会产生任何代码覆盖

时间:2015-06-09 18:33:59

标签: eclipse jacoco websphere-liberty

我正在尝试使用JaCoCo进行代码覆盖。我从Eclipse运行Liberty(使用Eclipse启动器)。在jvm.options中,我添加了以下行:(用< location>替换路径)

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

然而,在运行测试后,我没有看到任何覆盖信息。看起来JaCoCo无法链接到我的Web应用程序war文件中的Java类。

是否有一个由具有java类的自由运行的不同进程?可以将java代理附加到该进程吗?

2 个答案:

答案 0 :(得分:1)

您使用的是JaCoCo 0.7.3或更高版本吗?如果是,我怀疑问题是由issue #272中的更改引起的,因为我上次检查过,WebSphere Liberty概要文件没有定义具有CodeSource位置的类,因此JaCoCo中的这种启发式操作会导致在WebSphere Liberty概要文件上运行的应用程序中的所有类被忽略了。如果您可以在最近的一些Liberty修补程序(public JPanel BallPanel = new JPanel() { @Override public Dimension getPreferredSize() { return new Dimension(400, 380); } }; //... private void startUp() { JLabel RightHandMessage; RightHandMessage = new JLabel("<html><col=000000>Welcome to the ball game!</font></html>", JLabel.CENTER); RightHandMessage.setLocation(getRightHandMessageBounds(1), getRightHandMessageBounds(2)); BallFrame.setLocationRelativeTo(null); BallFrame.setTitle("The Ball Game V1 - Cam"); BallPanel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.gridx = 0; gbc.gridy = 0; gbc.weighty = 1; gbc.fill = GridBagConstraints.VERTICAL; BallPanel.add(createVerticalSeparator(), gbc); gbc.gridx = 1; gbc.weighty = 0; gbc.fill = GridBagConstraints.NONE; gbc.anchor = GridBagConstraints.NORTH; BallPanel.add(RightHandMessage, gbc); BallFrame.setContentPane(BallPanel); BallFrame.pack(); BallFrame.setLocationByPlatform(true); //BallPanel.setVisible(true); BallFrame.setVisible(true); } )上确认您的应用程序的情况,那么我建议您打开WebSphere RFEJaCoCo issue或两者。

答案 1 :(得分:0)

问题解决了。

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

感谢bkail