Saltar al contenido principal

SonarScanner + Java 21: qué rompió al actualizar SonarQube a 2026.4

· 3 min de lectura
Franco R.
El chico de software @ sils.tech

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:

  1. Paso 1 — @sonar/scan@^4.4.0 en los stages de Sonar (que en ese momento seguían en node:20, el mínimo que soporta esa versión). El bin sonar-scanner se mantiene como alias, así que no hizo falta tocar el Jenkinsfile ni el script npm run sonar.
  2. Paso 2 — se subió @sonar/scan a ^5.0.0, que requiere Node 22.12+ y elimina los alias sonar/sonar-scanner en favor de sonar-scanner-npm. Se actualizó el script sonar en package.json y se pasaron los stages Sonar MR y Sonar dev del Jenkinsfile (y de paso Build/Tests) a node: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 de sonarqube-scanner por @sonar/scan, y ajuste del script sonar.
  • Jenkinsfile: imagen Docker de los stages de Sonar (y build/tests) de node:20 a node: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.