SonarQube 6.2 / sonar-packaging-maven-plugin : Missing Guava dependency (ClassNotFoundException) on Custom plugin

299 views
Skip to first unread message

pons...@gmail.com

unread,
Mar 28, 2017, 2:12:17 AM3/28/17
to SonarQube
HI,

I'm trying to build a Custom Sonar Plugin. This Plugin code builds fine, but when I try to run the analysis using this plugin, I got the below ClassNotFoundException error for Guava Dependency.
I have given the pom.xml of custom plugin and its Maven Dependency Tree snapshots below. 
Let me know what could the issue in the pom.xml that causes this issue? 

Error During Analysis:
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)

While building the custom plugin, below warning is logged for Guava jar.

[WARNING] com.google.guava:guava:jar:19.0:compile is provided by SonarQube plugin API and will not be packaged in your plugin


POM.XML:



<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 
<modelVersion>4.0.0</modelVersion>


 
<parent>
   
<groupId>org.sonarsource.parent</groupId>
   
<artifactId>parent</artifactId>
   
<version>39</version>
 
</parent>
 
 
<groupId>org.sonarsource.pmd</groupId>
 
<artifactId>sonar-pmd-plugin</artifactId>
 
<packaging>sonar-plugin</packaging>
 
<version>2.6</version>


 
<name>Custom PMD Plugin</name>
 
 
<properties>
   
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   
<jdk.min.version>1.8</jdk.min.version>
     
<maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
   
<sslr.version>1.21</sslr.version>
 
<sonar.version>6.2</sonar.version>
   
<pmd.version>5.4.2</pmd.version>
   
<sonar-java.version>4.2</sonar-java.version>
 
</properties>


 
<dependencies>
   
   
<dependency>
     
<!-- packaged with the plugin -->
     
<groupId>commons-lang</groupId>
     
<artifactId>commons-lang</artifactId>
     
<version>2.6</version>
   
</dependency>




 
<dependency>
       
<groupId>org.sonarsource.sonarqube</groupId>
       
<artifactId>sonar-plugin-api</artifactId>
       
<version>${sonar.version}</version>
       
<scope>provided</scope>
     
</dependency>
     
<dependency>
       
<groupId>org.sonarsource.sonarqube</groupId>
       
<artifactId>sonar-testing-harness</artifactId>
       
<version>${sonar.version}</version>
     
</dependency>
     
     
   
<dependency>
     
<groupId>junit</groupId>
     
<artifactId>junit</artifactId>
     
<version>4.11</version>
     
<scope>test</scope>
   
</dependency>
   
   
<dependency>
     
<groupId>org.sonarsource.java</groupId>
     
<artifactId>sonar-java-plugin</artifactId>
     
<type>sonar-plugin</type>
     
<version>${sonar-java.version}</version>
     
<scope>provided</scope>
   
</dependency>


   
<dependency>
       
<groupId>org.sonarsource.sslr</groupId>
       
<artifactId>sslr-testing-harness</artifactId>
       
<version>${sslr.version}</version>
     
</dependency>
     
<dependency>
       
<groupId>org.sonarsource.sslr-squid-bridge</groupId>
       
<artifactId>sslr-squid-bridge</artifactId>
       
<version>2.6.1</version>
       
<exclusions>
         
<exclusion>
           
<groupId>org.codehaus.sonar.sslr</groupId>
           
<artifactId>sslr-core</artifactId>
         
</exclusion>
         
<exclusion>
           
<groupId>org.codehaus.sonar</groupId>
           
<artifactId>sonar-plugin-api</artifactId>
         
</exclusion>
         
<exclusion>
           
<groupId>org.codehaus.sonar.sslr</groupId>
           
<artifactId>sslr-xpath</artifactId>
         
</exclusion>
         
<exclusion>
           
<groupId>org.slf4j</groupId>
           
<artifactId>jcl-over-slf4j</artifactId>
         
</exclusion>
       
</exclusions>
     
</dependency>
     
   
<dependency>
     
<groupId>net.sourceforge.pmd</groupId>
     
<artifactId>pmd-core</artifactId>
     
<version>${pmd.version}</version>
     
<exclusions>
       
<exclusion>
         
<groupId>junit</groupId>
         
<artifactId>junit</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>xml-apis</groupId>
         
<artifactId>xml-apis</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>xerces</groupId>
         
<artifactId>xercesImpl</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>com.beust</groupId>
         
<artifactId>jcommander</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>net.java.dev.javacc</groupId>
         
<artifactId>javacc</artifactId>
       
</exclusion>
     
</exclusions>
   
</dependency>
   
   
<dependency>
     
<groupId>net.sourceforge.pmd</groupId>
     
<artifactId>pmd-java</artifactId>
     
<version>${pmd.version}</version>
     
<exclusions>
       
<exclusion>
         
<groupId>xml-apis</groupId>
         
<artifactId>xml-apis</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>xerces</groupId>
         
<artifactId>xercesImpl</artifactId>
       
</exclusion>
       
<exclusion>
         
<groupId>net.java.dev.javacc</groupId>
         
<artifactId>javacc</artifactId>
       
</exclusion>
     
</exclusions>
   
</dependency>


   
<dependency>
     
<groupId>jdom</groupId>
     
<artifactId>jdom</artifactId>
     
<version>1.0</version>
   
</dependency>


   
<dependency>
     
<groupId>org.apache.maven</groupId>
     
<artifactId>maven-project</artifactId>
     
<version>2.0.7</version>
     
<scope>test</scope>
   
</dependency>
   
   
   
<dependency>
     
<groupId>org.mockito</groupId>
     
<artifactId>mockito-all</artifactId>
     
<version>1.9.5</version>
     
<scope>test</scope>
   
</dependency>


   
<dependency>
     
<groupId>commons-io</groupId>
     
<artifactId>commons-io</artifactId>
     
<version>2.4</version>
     
<scope>test</scope>
   
</dependency>
   
   
     
<dependency>
       
<groupId>org.sonarsource.sslr</groupId>
       
<artifactId>sslr-core</artifactId>
       
<version>${sslr.version}</version>
       
<exclusions>
         
<exclusion>
           
<groupId>com.google.guava</groupId>
           
<artifactId>guava</artifactId>
         
</exclusion>
       
</exclusions>
     
</dependency>

 
</dependencies>
 
<build>
   
<finalName>${project.artifactId}</finalName>
   
<plugins>
     
<plugin>
       
<groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId>
       
<artifactId>sonar-packaging-maven-plugin</artifactId>
       
<version>1.17</version>
       
<extensions>true</extensions>
       
<configuration>
         
<pluginClass>org.sonar.plugins.pmd.PmdPlugin</pluginClass>
         
<sonarLintSupported>true</sonarLintSupported>
       
</configuration>
     
</plugin>
     
<plugin>
       
<groupId>org.apache.maven.plugins</groupId>
       
<artifactId>maven-compiler-plugin</artifactId>
       
<version>3.5.1</version>
       
<configuration>
         
<source>${jdk.min.version}</source>
         
<target>${jdk.min.version}</target>
       
</configuration>
     
</plugin>
     
<plugin>
       
<!-- UTF-8 bundles are not supported by Java, so they must be converted during build -->
       
<groupId>org.codehaus.mojo</groupId>
       
<artifactId>native2ascii-maven-plugin</artifactId>
       
<version>1.0-beta-1</version>
       
<executions>
         
<execution>
           
<goals>
             
<goal>native2ascii</goal>
           
</goals>
         
</execution>
       
</executions>
     
</plugin>
   
</plugins>
 
</build>

</project>


mvn dependency:tree output:

[INFO] --- maven-dependency-plugin:2.9:tree (default-cli) @ sonar-pmd-plugin ---
[INFO] org.sonarsource.pmd:sonar-pmd-plugin:sonar-plugin:2.6
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- org.sonarsource.sonarqube:sonar-plugin-api:jar:6.2:provided
[INFO] |  +- org.codehaus.woodstox:woodstox-core-lgpl:jar:4.4.0:provided
[INFO] |  |  \- javax.xml.stream:stax-api:jar:1.0-2:provided
[INFO] |  +- org.codehaus.woodstox:stax2-api:jar:3.1.4:provided
[INFO] |  \- org.codehaus.staxmate:staxmate:jar:2.0.1:provided
[INFO] +- org.sonarsource.sonarqube:sonar-testing-harness:jar:6.2:compile
[INFO] |  +- org.assertj:assertj-core:jar:3.4.1:compile
[INFO] |  +- org.assertj:assertj-guava:jar:3.0.0:compile
[INFO] |  +- com.googlecode.json-simple:json-simple:jar:1.1.1:compile
[INFO] |  +- com.google.code.gson:gson:jar:2.3.1:compile
[INFO] |  +- com.tngtech.java:junit-dataprovider:jar:1.9.2:compile
[INFO] |  +- org.hamcrest:hamcrest-all:jar:1.3:compile
[INFO] |  \- org.mockito:mockito-core:jar:1.10.19:compile
[INFO] |     \- org.objenesis:objenesis:jar:2.1:runtime
[INFO] +- junit:junit:jar:4.11:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.sonarsource.java:sonar-java-plugin:sonar-plugin:4.2:provided
[INFO] |  +- org.sonarsource.java:java-surefire:jar:4.2:provided
[INFO] |  +- org.sonarsource.java:java-jacoco:jar:4.2:provided
[INFO] |  |  +- org.jacoco:org.jacoco.core:jar:0.7.5.201505241946:provided
[INFO] |  |  \- org.sonarsource.java:java-jacoco-previous:jar:4.2:provided
[INFO] |  +- org.sonarsource.java:java-frontend:jar:4.2:provided
[INFO] |  |  +- com.google.guava:guava:jar:19.0:compile
[INFO] |  |  +- org.sonarsource.java:java-maven-model:jar:4.2:provided
[INFO] |  |  \- org.ow2.asm:asm-debug-all:jar:5.0.3:provided
[INFO] |  \- org.sonarsource.java:java-checks:jar:4.2:provided
[INFO] +- org.sonarsource.sslr:sslr-testing-harness:jar:1.21:compile
[INFO] |  +- org.sonarsource.sslr:sslr-toolkit:jar:1.21:compile
[INFO] |  |  +- org.sonarsource.sslr:sslr-xpath:jar:1.21:compile
[INFO] |  |  \- org.codehaus.sonar:sonar-colorizer:jar:3.7:compile
[INFO] |  |     \- org.codehaus.sonar:sonar-channel:jar:3.7:compile
[INFO] |  \- org.easytesting:fest-assert:jar:1.4:compile
[INFO] |     \- org.easytesting:fest-util:jar:1.1.6:compile
[INFO] +- org.sonarsource.sslr-squid-bridge:sslr-squid-bridge:jar:2.6.1:compile
[INFO] |  +- org.picocontainer:picocontainer:jar:2.14.1:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.5.6:compile
[INFO] +- net.sourceforge.pmd:pmd-core:jar:5.4.2:compile
[INFO] |  +- jaxen:jaxen:jar:1.1.6:compile
[INFO] |  +- net.sourceforge.saxon:saxon:jar:9.1.0.8:compile
[INFO] |  +- org.apache.commons:commons-lang3:jar:3.4:compile
[INFO] |  +- org.ow2.asm:asm:jar:5.0.4:compile
[INFO] |  \- net.sourceforge.saxon:saxon:jar:dom:9.1.0.8:runtime
[INFO] +- net.sourceforge.pmd:pmd-java:jar:5.4.2:compile
[INFO] +- jdom:jdom:jar:1.0:compile
[INFO] +- org.apache.maven:maven-project:jar:2.0.7:test
[INFO] |  +- org.apache.maven:maven-settings:jar:2.0.7:test
[INFO] |  +- org.apache.maven:maven-profile:jar:2.0.7:test
[INFO] |  +- org.apache.maven:maven-model:jar:2.0.7:test
[INFO] |  +- org.apache.maven:maven-artifact-manager:jar:2.0.7:test
[INFO] |  |  +- org.apache.maven:maven-repository-metadata:jar:2.0.7:test
[INFO] |  |  \- org.apache.maven.wagon:wagon-provider-api:jar:1.0-beta-2:test
[INFO] |  +- org.apache.maven:maven-plugin-registry:jar:2.0.7:test
[INFO] |  +- org.codehaus.plexus:plexus-utils:jar:1.4.1:test
[INFO] |  +- org.apache.maven:maven-artifact:jar:2.0.7:test
[INFO] |  \- org.codehaus.plexus:plexus-container-default:jar:1.0-alpha-9-stable-1:test
[INFO] |     \- classworlds:classworlds:jar:1.1-alpha-2:test
[INFO] +- org.mockito:mockito-all:jar:1.9.5:test
[INFO] +- commons-io:commons-io:jar:2.4:test
[INFO] \- org.sonarsource.sslr:sslr-core:jar:1.21:compile
[INFO]    +- com.google.code.findbugs:jsr305:jar:1.3.9:compile
[INFO]    \- cglib:cglib-nodep:jar:3.1:compile



Simon Brandhof

unread,
Mar 28, 2017, 3:51:25 AM3/28/17
to pons...@gmail.com, SonarQube
Hi,

Can you send the full build logs please ? (the ones which include "[WARNING] com.google.guava:guava:jar:19.0:compile is provided by SonarQube plugin API and will not be packaged in your plugin").

Out of scope, but here are a few feedbacks on your pom:
  • it's recommended to not inherit from org.sonarsource.parent. It is coupled with SonarSource environment.
  • you should not use the groupId org.sonarsource.pmd because it's not a SonarSource project.
  • the property sonarLintSupported is useless and should be removed. SonarLint does support only a white list of plugins, whatever the value of this property.
--
Simon BRANDHOF | SonarSource
Tech Lead & Co-Founder
http://twitter.com/SimonBrandhof
Reply all
Reply to author
Forward
0 new messages