私たちのJavaプロジェクトの一つにソナーを統合していると私は前に遭遇したことのない奇妙なエラーが発生します。サーバーがSonarQube 5.6SonarQube:登録記号:「」二度同じスコープ内
ERROR: Unable to create symbol table for : src/main/java/.../Challenge.java
java.lang.IllegalStateException: Registering symbol: 'a' twice in the same scope
を。 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;
}
}
は、このエラーが失敗し、他のいくつかの例では、解析が進み、結果が正常にアップロードされている間、中止する分析の原因となります。
これまで問題のあるファイルを除外するだけで問題を解決できました。より良い解決策があれば幸いです。
SonarJavaアナライザーのバージョンは何ですか?あなたの悲惨さやバイトコードが織っているところで難読化が起こっていますか?このエラーは、同じスコープ内の2つのシンボルが同じ名前(この場合は「a」)を持ち、ソースで発生していないように見える(コンパイルしない)ので、バイトコードから来る可能性があります。 – benzonico
ソナースキャナ2.7が使用されており、難読化が進行中であることに気づいていません。依存関係のいくつかを除外するとこの問題が解決する可能性があることを示唆していますか? ところで、上記のChallenge.javaクラスでは、正確に「スコープ」とは何ですか? – dokaspar
これはスキャナのバージョンです。あなたのサーバーにインストールされているSonarJavaアナライザーのバージョンは何ですか?問題は、チャレンジコードからコンパイルされ、(直接的または間接的に)使用されるクラスの1つに由来します。ここで問題はChallengeクラスで_directly_ではありません:このクラスで使用されるバイトコードのどこかに、同じスコープで2回定義された 'a'という名前のシンボルがあります(スコープは名前がメソッド、ブロック、クラス) – benzonico