>

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 스캐너 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

    이 오류는 같은 범위의 두 심볼이 같은 이름 (이 경우 'a')을 가질 때 발생하며, 지적했듯이 소스에서 발생하지 않는 것처럼 보이므로 (컴파일 할 수 없음) 바이트 코드에서.

    문제는 Challenge 코드에서 (직접 또는 간접적으로) 컴파일되고 사용 된 클래스 중 하나에서 비롯됩니다. 그리고 여기서 문제는 Challenge 클래스에 직접 있지 않습니다.이 클래스에서 사용하는 바이트 코드의 어딘가에 같은 범위에서 두 번 정의 된 'a'라는 기호가 있습니다 (범위는 이름이있는 프로그램의 영역입니다) 유효, 메소드, 블록, 클래스)

  • 이전 apache spark sql - Java를 사용하여 Parquet 파일 크기와 줄 수를 얻는 방법은 무엇입니까?
  • 다음 java - spring-security는 authorizeRequests () anyRequest () permitAll ()에도 불구하고 401을 리턴합니다