SonarScanner + Java 21: qué rompió al actualizar SonarQube a 2026.4
Después de actualizar el SonarQube que corre en nuestro server (como container Docker) a la versión 2026.4, los pipelines de Jenkins que corren análisis de Sonar empezaron a fallar con este error:
ERROR: Error during SonarScanner execution
ERROR: Java 17 is not supported. Please upgrade to Java 21 or newer, or use JRE
auto-provisioning to keep this requirement always up to date.
Causa raíz
El proyecto corría el análisis con el paquete npm sonarqube-scanner@3.5.0, un wrapper
comunitario del scanner abandonado desde 2023. Ese paquete tiene hardcodeada la versión
del sonar-scanner-cli que descarga (5.0.1.3006), que es previa a que existiera el
JRE auto-provisioning (esa función se agregó en el CLI oficial a partir de la versión 6.0)
y trae embebido un JRE 17.
Al subir el servidor a 2026.4, el Scanner Engine que se descarga desde el servidor pasó a exigir Java 21+ para poder ejecutarse. El JRE 17 embebido del CLI viejo ya no pasa esa validación, de ahí el error.
Solución
Se migró del paquete abandonado al que SonarSource mantiene activamente,
@sonar/scan (repo
SonarSource/sonar-scanner-npm), que
resuelve el JRE correcto automáticamente contra lo que pida el server, sin tener que pinnear
versiones del CLI a mano nunca más.
Se hizo en dos pasos:
- Paso 1 —
@sonar/scan@^4.4.0en los stages de Sonar (que en ese momento seguían ennode:20, el mínimo que soporta esa versión). El binsonar-scannerse mantiene como alias, así que no hizo falta tocar elJenkinsfileni el scriptnpm run sonar. - Paso 2 — se subió
@sonar/scana^5.0.0, que requiere Node 22.12+ y elimina los aliassonar/sonar-scanneren favor desonar-scanner-npm. Se actualizó el scriptsonarenpackage.jsony se pasaron los stagesSonar MRySonar devdelJenkinsfile(y de pasoBuild/Tests) anode:22.
En ambos casos la sintaxis -Dsonar.xxx=yyy y la lectura de sonar-project.properties se
mantuvieron sin cambios.
Verificación
Corriendo el scanner nuevo contra el servidor real se ve que detecta la versión del server y confirma que el auto-provisioning está soportado, sin volver a mencionar Java 17:
[INFO] Bootstrapper: Server URL: https://sonar.sils.tech
[INFO] Bootstrapper: SonarQube server version: 2026.4.0
[INFO] Bootstrapper: JRE provisioning is supported
Archivos tocados
package.json: reemplazo desonarqube-scannerpor@sonar/scan, y ajuste del scriptsonar.Jenkinsfile: imagen Docker de los stages de Sonar (y build/tests) denode:20anode:22.
Ejemplo de MR con el cambio: merge_requests/129.
Si en otro repo aparece el mismo error, el fix es el mismo: dejar de usar wrappers viejos de
sonar-scanner y migrar a @sonar/scan, con Node 22+ si se quiere ir directo a la v5.