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

时间:2017-05-12 06:57:21

标签: java sonarqube

我正在将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;
    }
}

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

到目前为止,我只能通过排除有问题的文件来解决问题。任何更好的解决方案都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

当同一作用域中的两个符号具有相同的名称时会引发此错误(在这种情况下为' a'),正如您所指出的那样,它似乎不会在源中发生(不会编译)所以它可能来自字节码。

问题来自于从Challenge代码编译和使用(直接或间接)的类之一。这里的问题不在于Challenge类:在这个类使用的字节码中的某个地方有一个名为' a'在同一范围内定义两次(范围是程序中名称有效的区域,方法,块,类)