我正在尝试对 java.lang
和jacoco一起上课,因为为什么不呢,我到目前为止成绩有限。
背景:到目前为止什么是有效的
这并不是真正的标准,但是要复制中提供的源代码非常困难 openjdk-8-sources
(在ubuntu上)在 ${sourceDirectory}
将rt.jar中提供的类 ${project.build.outputDirectory}
,然后jacoomaven插件可以看到它们并为某些类生成合适的输出。
例如,我得到了一些关于 sun.reflect.ByteVectorFactory
.
但我没法得到学校课程的保险 java.lang
. 打电话的时候 Byte.toString()
,该功能未包含在报告和 Byte.class
不会显示在生成的数据中 classDumpDir
.
我查了一下jacoco的资料 java.lang
被显式忽略,到目前为止我没有发现任何明显的问题,但我对jacoco源代码一点也不熟悉。
实际问题
如何绕过这个限制?我在考虑以下可能性:
这是java的一个硬限制,对此无能为力
排除 java.lang
在jacoco中是硬编码的,因为它是一个系统包名,但可以更改
通过设置一些隐藏选项或环境变量
通过提供类路径的修改版本来覆盖类路径中的某些文件
通过更改jacoco源代码
编辑
我似乎不是唯一一个尝试做这种事情的人。
邮件列表线程:https://groups.google.com/g/jacoco/c/_tuoa7dha7e/m/bqj53ovxousj
github上的拉取请求:https://github.com/jacoco/jacoco/pull/49
在这中间的某个地方,有人提到
特别是代理本身使用的jdk类可能无法跟踪。
所以它可以解释为什么一些类没有被检测。
1条答案
按热度按时间xmjla07d1#
我做了更多的测试,我看到了
java.lang.byte未获得覆盖率
java.lang.processbuilder获取覆盖率
java.util.arraylist未获得覆盖率
java.util.calendar获取覆盖率
因此,在代理加载时已经加载的类似乎不能以这种方式进行检测。
我仍然不确定这是不可能实现的,还是仅仅是困难的,所以在接受我自己的答案之前,我会等待一段时间,两个选项:
离线检测,我不知道,也许能帮上忙
重新加载所有类以便对它们进行检测