Guava library

62 views
Skip to first unread message

dial...@gmail.com

unread,
Nov 17, 2017, 3:18:14 AM11/17/17
to SonarLint
Our custom Java plugin uses Guava library. As soon as I have updated bindings and tried to analyze any Java class with SonarLint for Intellij IDEA an error is shown. The logs contains following exception:

Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList

It looks like the SonarLint plugin does not contain classes from Guava library. Is that expected?

Julien HENRY

unread,
Nov 17, 2017, 3:33:31 AM11/17/17
to Egor Korobitsin, SonarLint
Hi Egor,

Can you precise:
  - the version of sonar-plugin-api you depends on?
  - the version of the sonar-packaging-maven-plugin you are using to package your plugin?
  - the Maven dependency scope you are using for Guava?

Thanks

Julien Henry | SonarSource

Developer

https://sonarsource.com


--
You received this message because you are subscribed to the Google Groups "SonarLint" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sonarlint+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sonarlint/962c7368-ab7f-4583-a385-ee92a154831c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

dial...@gmail.com

unread,
Nov 17, 2017, 3:49:22 AM11/17/17
to SonarLint
Sure. 
 - sonar-plugin-api is 5.0.1
 - sonar-packaging-maven-plugin 1.17
 - maven dependency scope for Guava (version 19.0) is default BUT that does not get into the plugin jar. As soon as I exclude Guava from sonar-java-plugin dependency that gets into the jar-bundle and SonarLint does not show any errors.

PS.
Here is the error log from SonarLint:

Error running SonarLint analysis
java.lang.IllegalStateException: Unable to load component class org.sonar.java.SonarComponents
at org.sonarsource.sonarlint.core.container.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:59)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:606)
at org.picocontainer.DefaultPicoContainer.getComponents(DefaultPicoContainer.java:587)
at org.sonarsource.sonarlint.core.container.ComponentContainer.getComponentsByType(ComponentContainer.java:266)
at org.sonarsource.sonarlint.core.analyzer.sensor.BatchExtensionDictionnary.completeBatchExtensions(BatchExtensionDictionnary.java:110)
at org.sonarsource.sonarlint.core.analyzer.sensor.BatchExtensionDictionnary.getExtensions(BatchExtensionDictionnary.java:104)
at org.sonarsource.sonarlint.core.analyzer.sensor.BatchExtensionDictionnary.getFilteredExtensions(BatchExtensionDictionnary.java:92)
at org.sonarsource.sonarlint.core.analyzer.sensor.BatchExtensionDictionnary.select(BatchExtensionDictionnary.java:59)
at org.sonarsource.sonarlint.core.analyzer.sensor.SensorsExecutor.execute(SensorsExecutor.java:56)
at org.sonarsource.sonarlint.core.analyzer.sensor.PhaseExecutor.execute(PhaseExecutor.java:44)
at org.sonarsource.sonarlint.core.container.analysis.AnalysisContainer.doAfterStart(AnalysisContainer.java:143)
at org.sonarsource.sonarlint.core.container.ComponentContainer.startComponents(ComponentContainer.java:125)
at org.sonarsource.sonarlint.core.container.ComponentContainer.execute(ComponentContainer.java:110)
at org.sonarsource.sonarlint.core.container.storage.StorageAnalyzer.analyze(StorageAnalyzer.java:72)
at org.sonarsource.sonarlint.core.container.storage.StorageContainerHandler.analyze(StorageContainerHandler.java:69)
at org.sonarsource.sonarlint.core.ConnectedSonarLintEngineImpl.lambda$analyze$0(ConnectedSonarLintEngineImpl.java:154)
at org.sonarsource.sonarlint.core.ConnectedSonarLintEngineImpl.withReadLock(ConnectedSonarLintEngineImpl.java:338)
at org.sonarsource.sonarlint.core.ConnectedSonarLintEngineImpl.withReadLock(ConnectedSonarLintEngineImpl.java:328)
at org.sonarsource.sonarlint.core.ConnectedSonarLintEngineImpl.analyze(ConnectedSonarLintEngineImpl.java:152)
at org.sonarlint.intellij.core.ConnectedSonarLintFacade.analyze(ConnectedSonarLintFacade.java:60)
at org.sonarlint.intellij.core.SonarLintFacade.startAnalysis(SonarLintFacade.java:60)
at org.sonarlint.intellij.analysis.SonarLintAnalyzer.analyzeModule(SonarLintAnalyzer.java:103)
at org.sonarlint.intellij.analysis.SonarLintTask.analyze(SonarLintTask.java:176)
at org.sonarlint.intellij.analysis.SonarLintTask.run(SonarLintTask.java:99)
at org.sonarlint.intellij.analysis.SonarLintUserTask.run(SonarLintUserTask.java:39)
at org.sonarlint.intellij.analysis.SonarLintJobManager.lambda$null$22(SonarLintJobManager.java:118)
at com.intellij.openapi.progress.impl.CoreProgressManager$3.run(CoreProgressManager.java:170)
at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:494)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:443)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:155)
at org.sonarlint.intellij.analysis.SonarLintJobManager.lambda$runTask$23(SonarLintJobManager.java:118)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList
at com.custom.rules.plugin.CustomSonarCheckLists.getJavaChecks(CustomSonarCheckLists.java:41)
at com.custom.rules.plugin.CustomSonarCheckRegistrar.register(CustomSonarCheckRegistrar.java:13)
at org.sonar.java.SonarComponents.<init>(SonarComponents.java:95)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
at org.sonarsource.sonarlint.core.container.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:57)
... 47 more
Caused by: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableList
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)
... 64 more

On Friday, November 17, 2017 at 11:33:31 AM UTC+3, Julien HENRY wrote:
Hi Egor,

Can you precise:
  - the version of sonar-plugin-api you depends on?
  - the version of the sonar-packaging-maven-plugin you are using to package your plugin?
  - the Maven dependency scope you are using for Guava?

Thanks

Julien Henry | SonarSource

Developer

https://sonarsource.com


2017-11-17 9:18 GMT+01:00 <dial...@gmail.com>:
Our custom Java plugin uses Guava library. As soon as I have updated bindings and tried to analyze any Java class with SonarLint for Intellij IDEA an error is shown. The logs contains following exception:

Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList

It looks like the SonarLint plugin does not contain classes from Guava library. Is that expected?

--
You received this message because you are subscribed to the Google Groups "SonarLint" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sonarlint+...@googlegroups.com.

Julien HENRY

unread,
Nov 17, 2017, 3:58:51 AM11/17/17
to Egor Korobitsin, SonarLint
We have recently dropped support of plugins compiled with sonar-plugin-api < 5.2. Guava used to be provided by the runtime, but this is no more the case. New SonarQube LTS is 6.7, and previous one was 5.6, so I really encourage you to update your plugin.

Updating the sonar-plugin-api dependency to 5.6+ should lead to have Guava embedded into your plugin, and fix your issue.

Hope that help,

Julien Henry | SonarSource

Developer

https://sonarsource.com


To unsubscribe from this group and stop receiving emails from it, send an email to sonarlint+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/sonarlint/282722fe-ede7-4131-8c87-73699ee5faa7%40googlegroups.com.

dial...@gmail.com

unread,
Nov 17, 2017, 5:32:48 AM11/17/17
to SonarLint
Thank you, it works. But it turned out I also had to exclude the transitive dependency org.codehaus.sonar:sonar-plugin-api of org.sonarsource.sslr-squid-bridge:sslr-squid-bridge.
Reply all
Reply to author
Forward
0 new messages