Java 测量代码质量时的代码行与指令行

Java 测量代码质量时的代码行与指令行,java,sonarqube,jacoco,loc,Java,Sonarqube,Jacoco,Loc,我有一个由许多模块组成的项目。我运行的是单元测试覆盖率和代码质量 出于技术原因,我不能为我的一个模块使用JaCoCo报告(GWT会删除target文件夹,我还不能解决这个问题) 假设我有8个模块,从1到8。 其中一个仅适用于域对象,因此我不想在测试中涉及它。另一个同样适用于自动生成的类 JaCoCo在5个模块上运行,声纳在6个模块上运行 JaCoCo显示的指令总数为145k 声纳显示总方位为75k 他们不是很相像吗?我错过什么了吗?无论我给他提供什么报告,杰科科都会考虑整个项目吗?有什么可能解

我有一个由许多模块组成的项目。我运行的是单元测试覆盖率和代码质量

出于技术原因,我不能为我的一个模块使用JaCoCo报告(GWT会删除
target
文件夹,我还不能解决这个问题)

假设我有8个模块,从1到8。 其中一个仅适用于域对象,因此我不想在测试中涉及它。另一个同样适用于自动生成的类

JaCoCo在5个模块上运行,声纳在6个模块上运行

JaCoCo显示的指令总数为145k

声纳显示总方位为75k


他们不是很相像吗?我错过什么了吗?无论我给他提供什么报告,杰科科都会考虑整个项目吗?有什么可能解释这种测量差距

他们不是很一样吗

一点也不

发件人:

JaCoCo计数的最小单位是单个Java字节码指令

“指令”和“代码行”的比较就像苹果和橙子的比较——它们并不代表同一件事。单行代码通常包含许多字节码指令

比如说

System.out.println("Hello, World!");
是一行,但有3个字节码指令,如下所示:

顺便说一句,JaCoCo还统计线路。但是,在将这个数字与SonarQube中的LoC进行比较时,请考虑到计算算法是不同的——JaCoCo通过分析编译器以字节码记录的信息来计算这个数字,而SonarQube通过分析源代码来计算这个数字

     0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
     3: ldc           #3                  // String Hello, World!
     5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V