Skip to content

SonarQube server crashes at startup when both ecoCode-android and Groovy plugins are onboard #83

@gvrf2911

Description

@gvrf2911

Describe the bug
SonarQube 10.3 server crashes at startup when both ecoCode-android and Groovy plugins are onboard.

To Reproduce
Steps to reproduce the behavior:

  1. Start SonarQube server with ecoCode-android and Groovy plugins onboard,
  2. SonarQube crashes with the following error:
023.11.29 15:41:52 INFO  web[][o.s.s.p.ServerPluginManager] Deploy ecoCode JavaScript plugin / 1.4.0 / null

2023.11.29 15:41:58 INFO  ...

2023.11.29 15:42:00 INFO  web[][o.s.s.p.DetectPluginChange] Detect plugin changes
2023.11.29 15:42:02 ERROR web[][o.s.s.p.Platform] Background initialization failed. Stopping SonarQube
java.lang.IllegalStateException: Fail to load plugin Groovy [groovy]
	at org.sonar.server.plugins.ServerExtensionInstaller.installExtensions(ServerExtensionInstaller.java:81)
	at org.sonar.server.platform.platformlevel.PlatformLevel4.start(PlatformLevel4.java:668)
	at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:214)
	at org.sonar.server.platform.PlatformImpl.startLevel34Containers(PlatformImpl.java:194)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.runIfNotAborted(PlatformImpl.java:362)
	at org.sonar.server.platform.PlatformImpl$1.doRun(PlatformImpl.java:113)
	at org.sonar.server.platform.PlatformImpl$AutoStarterRunnable.run(PlatformImpl.java:346)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@12bcd0c0-org.sonar.api.config.PropertyDefinition-sonar.groovy.file.suffixes' defined in null: Cannot register bean definition [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] for bean 'jdk.internal.loader.ClassLoaders$AppClassLoader@12bcd0c0-org.sonar.api.config.PropertyDefinition-sonar.groovy.file.suffixes': There is already [Generic bean: class [org.sonar.api.config.PropertyDefinition]; scope=singleton; abstract=false; lazyInit=null; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null] bound.
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.registerBeanDefinition(DefaultListableBeanFactory.java:1006)
	at org.springframework.context.support.GenericApplicationContext.registerBeanDefinition(GenericApplicationContext.java:342)
	at org.springframework.beans.factory.support.BeanDefinitionReaderUtils.registerBeanDefinition(BeanDefinitionReaderUtils.java:164)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.doRegisterBean(AnnotatedBeanDefinitionReader.java:285)
	at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:233)
	at org.springframework.context.annotation.AnnotationConfigApplicationContext.registerBean(AnnotationConfigApplicationContext.java:198)
	at org.sonar.core.platform.SpringComponentContainer.registerInstance(SpringComponentContainer.java:126)
	at org.sonar.core.platform.SpringComponentContainer.addExtension(SpringComponentContainer.java:142)
	at org.sonar.core.platform.SpringComponentContainer.addExtension(SpringComponentContainer.java:236)
	at org.sonar.core.platform.SpringComponentContainer.addExtension(SpringComponentContainer.java:41)
	at org.sonar.server.plugins.ServerExtensionInstaller.installExtension(ServerExtensionInstaller.java:89)
	at org.sonar.server.plugins.ServerExtensionInstaller.installExtensions(ServerExtensionInstaller.java:73)
	... 7 common frames omitted
2023.11.29 15:42:02 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process

Expected behavior
SonarQube should start up with both plugins onboard.

Additional context

SonarQube version: 10.3.0 Enterprise Edition
ecoCode-android version : 1.1.0
Groovy plugin: 1.8

SonarQube launches well with only one of the two plugins.

With the ecoCode-android plugins installed, there are 3 rules created for the Groovy language, whereas the Groovy plugin integrates 385 rules and activates 58 in the "Sonar way" profile.

Although the Groovy plugin is unmaintained, it still works on SonarQube versions 9.9 LTS, 10.2.1 and 10.3 and is used in our company.

It's a sad fact that these plugins look like to be incompatible, especially as it seems that much of the Groovy language analysis code of ecoCode-android plugin comes from the Groovy plugin.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions