SonarQube Plugin : NoSuchMethodError at startup

Hello Java & Sonar guides

When I add a custom sonar plugin (for XML VTOM scripts) in my sonar [Community Edition - Version 8.4.2 (build 36762)], I get the following error :

2020.10.05 12:32:42 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube
java.lang.NoSuchMethodError: 'void org.sonarsource.analyzer.commons.RuleMetadataLoader.<init>(java.lang.String, java.lang.String, org.sonar.api.SonarRuntime)'
    at org.sonar.plugins.xml.XmlRulesDefinition.define(XmlRulesDefinition.java:39)
    at org.sonar.server.rule.RuleDefinitionsLoader.load(RuleDefinitionsLoader.java:53)
    at org.sonar.server.rule.RegisterRules.start(RegisterRules.java:120)
    at org.sonar.core.platform.StartableCloseableSafeLifecyleStrategy.start(StartableCloseableSafeLifecyleStrategy.java:40)
    at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
    at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
    at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
    at org.picocontainer.behaviors.Stored.start(Stored.java:110)
    at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1016)
    at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1009)
    at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:136)
    at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:90)
    at org.sonar.server.platform.platformlevel.PlatformLevelStartup.access$001(PlatformLevelStartup.java:48)
    at org.sonar.server.platform.platformlevel.PlatformLevelStartup$1.doPrivileged(PlatformLevelStartup.java:85)
    at org.sonar.server.user.DoPrivileged.execute(DoPrivileged.java:46)
    at org.sonar.server.platform.platformlevel.PlatformLevelStartup.start(PlatformLevelStartup.java:82)
    at org.sonar.server.platform.PlatformImpl.executeStartupTasks(PlatformImpl.java:198)
    at org.sonar.server.platform.PlatformImpl.access$400(PlatformImpl.java:46)
    at org.sonar.server.platform.PlatformImpl$1.lambda$doRun$1(PlatformImpl.java:122)
    at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:370)
    at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:122)
    at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:354)
    at java.base/java.lang.Thread.run(Thread.java:834)
2020.10.05 12:32:42 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process

Context : maven project

In the pom.xml :

<dependency>
    <groupId>org.sonarsource.sonarqube</groupId>
    <artifactId>sonar-plugin-api</artifactId>
    <version>8.4.2.36762</version> <!-- -->
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.sonarsource.sonarqube</groupId>
    <artifactId>sonar-plugin-api-impl</artifactId>
    <version>8.4.2.36762</version> 
</dependency>

<dependency>
    <groupId>org.sonarsource.xml</groupId>
    <artifactId>sonar-xml-plugin</artifactId>
    <version>2.0.1.2020</version>
</dependency>

Any help is welcome

Hi,

First thing suspicious are the two last dependencies.

  1. I would set scope of sonar-plugin-api-impl to test since you don’t use it for anything else, right :wink:
  2. I would remove dependency on sonar-xml-plugin since I don’t see any reason to use it. If you want to express that your plugin need the XML plugin to be installed in the SonarQube server (for example to have the XML language declared already), then you simply have to declare a dependency in the plugin MANIFEST. To do so, you can set the property requirePlugins in the sonar-packaging-maven-plugin, like that.

Try that, and let us know if you have more issues.