这一条有点具体.

We use SonarCloud, and the "New Code" settings for the relevant project is as following: New code definition

也就是说,在主分支机构上,只考虑新于2天的代码.

We had a merge request that made some changes, including switching from Java 11 to Java 17. It had a passing pipeline, so we merged, and bam! the analysis fails on the main branch: analysis results

如您所见,新代码被正确检测到(它显示"新代码:从2天前开始",并且只有9行被认为是新的.然而,我得到了10种代码气味,它们是在完全不同的、更老的代码上长大的.这些气味通常与Java 17有关(将‘Stream.Collect(Collectors.toList())’的用法替换为‘Stream.toList()’).

所以我的问题是:当SonarQube检测到Java版本更改时,它会忽略新的代码定义吗?是不是因为这些问题存在于旧代码中,但被认为是新的?为什么它没有在通过合并请求分析中被提出?

推荐答案

更改一行代码可能会在其他地方产生错误,代码气味、安全热漏洞等也是如此;因此,一般而言,Sonarqube总是计算所有代码库.在本例中发生变化的是判断中使用的代码模式或"规则"的数量:如果判断这Sonar Rules catalog for Java个代码模式,您可以看到一些规则标有Java版本(从"java7"到"java17"),这意味着升级到Java 17触发了以前没有使用过的新规则.

严格来说,"New Code"选项卡并不是指"新代码行",而是指X天前不存在的问题,正如快照中配置参数描述的最后一句话所解释的那样.

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

Mat. n_Delete()和Mat. n_release的区别

如何使用Java API在Oracle ODI中运行模拟?

使用@MappdSuperClass扩展ParentClass&Won t继承ParentClass属性

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

当涉及到泛型时,类型推理在Java中是如何工作的?

CompleteableFuture是否运行在不同的内核上?

SpringBoot+Java 17@Valid未验证POJO

测试期间未执行开放重写方法

按属性值从流中筛选出重复项

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

有效的公式或值列表必须少于或等于255个字符

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

无法使用Freemarker从XML中读取重复的标记值

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

循环不起作用只有第一个元素重复

如何在Java中的重写方法参数中强制(Enum)接口实现?

Java 17与Java 8双重表示法

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

MapStruct记录到记录的映射不起作用