我正在将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;
}
}
对于某些文件,此错误会导致分析失败并中止,而在其他情况下,分析会继续进行并且结果会成功上传。
到目前为止,我只能通过排除有问题的文件来解决问题。任何更好的解决方案都将受到高度赞赏。
答案 0 :(得分:1)
当同一作用域中的两个符号具有相同的名称时会引发此错误(在这种情况下为' a'),正如您所指出的那样,它似乎不会在源中发生(不会编译)所以它可能来自字节码。
问题来自于从Challenge代码编译和使用(直接或间接)的类之一。这里的问题不在于Challenge类:在这个类使用的字节码中的某个地方有一个名为' a'在同一范围内定义两次(范围是程序中名称有效的区域,方法,块,类)