SonarQube:注册符号:在同一范围内'a'两次



我正在将Sonar集成到我们的一个Java项目中,并遇到了以前从未遇到过的奇怪错误:

 ERROR: Unable to create symbol table for : src/main/java/.../Challenge.java
 java.lang.IllegalStateException: Registering symbol: 'a' twice in the same scope

服务器是SonarQube 5.6.6(安装了SonarJava插件4.8.0.9441(,代码是用Java 1.6编译的,Java 1.8用于SonarQube Scanner 2.7。项目中大约有 2000 *.java 个源文件,此错误发生在分析少数文件期间。导致此错误的某些文件非常简单,如下所示:

import com.isprint.accessmatrix.serviceapi.ServicePreAutheResult;
public class Challenge {
    private final ServicePreAutheResult preAuthResult;
    Challenge(ServicePreAutheResult preAuthResult) {
        this.preAuthResult = preAuthResult;
    }
    ServicePreAutheResult getPreAuthResult() {
        return preAuthResult;
    }
}

对于某些文件,此错误会导致分析失败并中止,而在其他一些情况下,分析将继续并成功上传结果。

到目前为止,我只能通过排除有问题的文件来解决问题。任何更好的解决方案将不胜感激。

当同一作用域中的两个符号具有相同的名称(在本例中为"a"(并且正如您指出的那样,此错误似乎不会发生在源代码中(不会编译(,因此它可能来自字节码。

问题来自从挑战代码编译和使用(直接或间接(的类之一。这里的问题并不直接出在 Challenge 类中:在此类使用的字节码中的某个地方,有一个名为"a"的符号,它在同一作用域中被定义两次(作用域是程序中名称有效的区域、方法、块、类(

最新更新