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