Compatibility Issue with Sonar-Gherkin Plugin on SonarQube 9.9.7

We recently encountered an issue after upgrading our SonarQube server. Below are the details:

Current Setup:
We had deployed SonarQube 8.9.10 in Kubernetes for analyzing our Java projects. Within this setup, we added two plugins:

  1. Java Custom Rules Plugin
  2. Sonar-Gherkin Plugin (sonar-gherkin-plugin-1.7.jar) – referenced from GitHub
    Both plugins were functioning correctly in the 8.9.10 server.

Issue After Upgrade:
After upgrading the SonarQube server to version 9.9.7 (LTS), the sonar-gherkin-plugin-1.7.jar stopped working due to the deprecation of certain APIs in the latest version.

We rely on this plugin for our project analysis and would greatly appreciate any guidance or assistance to resolve this compatibility issue.

Detailed error logs

2024.12.28 12:13:16 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube
java.lang.IllegalStateException: Fail to load plugin Cucumber Gherkin [gherkin]
	at org.sonar.server.plugins.ServerExtensionInstaller.installExtensions(ServerExtensionInstaller.java:81)
	at org.sonar.server.platform.platformlevel.PlatformLevel4.start(PlatformLevel4.java:655)
	at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:196)
	at org.sonar.server.platform.PlatformImpl.startLevel34Containers(PlatformImpl.java:177)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:344)
	at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:105)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:328)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/sonar/api/profiles/ProfileDefinition
	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(Unknown Source)
	at java.base/java.net.URLClassLoader.findClass(Unknown Source)
	at org.sonar.classloader.ClassRealm.loadClassFromSelf(ClassRealm.java:125)
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:37)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	at org.sonar.plugins.gherkin.GherkinPlugin.define(GherkinPlugin.java:28)
	at org.sonar.server.plugins.ServerExtensionInstaller.installExtensions(ServerExtensionInstaller.java:71)
	... 7 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.sonar.api.profiles.ProfileDefinition
	at org.sonar.classloader.ParentFirstStrategy.loadClass(ParentFirstStrategy.java:39)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:87)
	at org.sonar.classloader.ClassRealm.loadClass(ClassRealm.java:76)
	... 21 common frames omitted

Hey there.

You’re probably going to have a hard time updating this plugin to be compatible with modern SonarQube versions – it last saw a meaningful update in 2017.

You’ll have to fork the plugin to bring it up to speed with 8 years of API changes – including what is failing on startup now which relates to the removal of org.sonar.api.profiles.ProfileDefinition

API Changes

Release 9.0

  • org.sonar.api.profiles.ProfileDefinition.java. Define quality profiles with BuiltInQualityProfilesDefinition.

You’ll have to be really comfortable with Java and custom SonarQube plugin development to make those changes. You might be able to take some inspiration from some other plugins that had to make changes due to this removal, like here.

Ultimately, this is part of the risk of relying on community-supported plugins that have stopped being maintained.