SonarQube와 SonarScanner를 간단하게 설명하자면 SonarQube가 코드 분석을 수행하고, 분석 결과를 저장하는 서버라면 SonarScanner는 실제 코드 분석을 수행하는 클라이언트 도구라고 생각하면 된다.
여기서 궁금한 점 만약, SonarQube 버전이 올라가면 SonarScanner 버전도 올려야 할까?
결론부터 말하자면 그렇다.
💡 SonarQube 10.5 버전으로 업그레이드 시, Sonar-Scanner 또한 업그레이드 필요 (최소 5.0.0.2966 이상 버전 사용 필수)
정말로 그런지 테스트를 해보자.
기존 버전
SonarQube : 8.9.4 community Edition
Sonar-Scanner : 4.8.0.2856
테스트 대상 버전
SonarQube : 10.5.1 community Edition
Sonar-Scanner : 최소 5.0.0.2966이상 ~ 6.1.0.4477
테스트 결과
SonarQube Version | SonarScanner | 결과 | 에러 메세지 | 비고 |
10.5.1 | 4.8.0.2856 | FAILURE | java.lang.UnsupportedClassVersionError: | SonarScanner Java Verion이 SonarQube의 Version과 맞지 않아 에러 발생함 |
10.5.1 | 6.1.0.4477 | EXECUTION SUCCESS | X | 24.09.21 기준 SonarScanner 최신 버전 |
10.5.1 | 5.0.0.2966 | EXECUTION SUCCESS | X | 실행 가능한 최소 버전 확인 |
8.9.4 | 4.8.0.2856 | EXECUTION SUCCESS | X | 기존 버전 |
에러 로그 상세
- SonarScanner에서 내부적으로 사용하는 Java version이 달라 발생한 에러이다. SonarScanner 4.8.0 버전의 Java Version Java 11.0.17 Eclipse Adoptium (64-bit)을 사용한다.
INFO: Scanner configuration file: C:\\경로\\SonarQubeTest\\sonar-scanner-4.8.0.2856-windows\\bin\\..\\conf\\sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.8.0.2856
INFO: Java 11.0.17 Eclipse Adoptium (64-bit)
INFO: Windows 10 10.0 amd64
INFO: User cache: C:\\Users\\seong\\.sonar\\cache
INFO: Analyzing on SonarQube server 10.5.1.90531
INFO: Default locale: "ko_KR", source code encoding: "x-windows-949" (analysis is platform dependent)
INFO: ------------------------------------------------------------------------
INFO: EXECUTION FAILURE
INFO: ------------------------------------------------------------------------
INFO: Total time: 0.845s
INFO: Final Memory: 4M/17M
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarScanner execution
org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
at java.base/java.net.URLClassLoader.defineClass(Unknown Source)
at java.base/java.net.URLClassLoader$1.run(Unknown Source)
at java.base/java.net.URLClassLoader$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.net.URLClassLoader.findClass(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedClassloader.loadClass(IsolatedClassloader.java:82)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
at org.sonarsource.scanner.api.internal.batch.DefaultBatchFactory.createBatch(DefaultBatchFactory.java:32)
at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
at com.sun.proxy.$Proxy0.execute(Unknown Source)
at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
at org.sonarsource.scanner.cli.Main.execute(Main.java:126)
at org.sonarsource.scanner.cli.Main.execute(Main.java:81)
at org.sonarsource.scanner.cli.Main.main(Main.java:62)
ERROR:
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.
주요 에러 메세지를 좀 더 자세히 확인해 보자.
has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0
1. class file version 61.0(=Java 17에서 컴파일된 클래스) 소나큐브 10.5 버전은 Java 17로 개발
2. this version of the Java Runtime only recognizes class file versions up to 55.0(= Java 11까지만 인식할 수 있다.) 소나스캐너 4.8 버전은 Java 11로 개발
즉, Java Runtime 환경이 Java 11이기 때문에 Java 17로 컴파일된 클래스를 실행을 할 수 없다는 뜻이다.
SonarScanner 버전별 명령어 Sample (Window)
SonarScanner 6.1 Ver.
{INSTALL_PATH}\sonar-scanner-6.1.0.4477-windows-x64\bin\sonar-scanner -Dsonar.token=토큰정보 -Dsonar.projectKey=프로젝트키 -Dsonar.java.binaries=.
SonarScanner 4.8 Ver.
{INSTALL_PATH}\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner -Dsonar.login=토큰정보 -Dsonar.projectKey=프로젝트키 -Dsonar.java.binaries=.
비고
- SonarQube 10.5 버전 이후로 sonar.login, sonar.password 파라미터가 Deprecated 됨!
- 토큰정보를 설정하는 파라미터가 다르다. (6.1 Ver. -Dsonar.token / 4.8 Ver. -Dsonar.login)
결론
💡 SonarQube와 SonarScanner의 버전 호환성은 아주 중요한 요소로, SonarQube 버전을 올릴 거면 SonarScanner 버전을 같이 올리자!
Ref.
- Java version 11
- Java version 17
728x90
'🏰 Back-end' 카테고리의 다른 글
[Github] OAuth 앱 권한 부여 방법 (0) | 2024.04.03 |
---|---|
[SonarQube] Webhook Additional parameters (소나큐브 비동기 호출 사용자 정의 파라미터 추가) (0) | 2023.12.14 |
[Mybatis] foreach insert duplicate update 처리(Upsert) (0) | 2023.10.08 |
[SonarQube] SonarQube 내장 DB (H2) 접속방법 (0) | 2023.08.14 |
[SonarQube] Window cmd에서 소나큐브 프로젝트 바인딩 명령어 입력 (0) | 2023.08.07 |
댓글