2016-02-12 170 views
0

我想为SonarQube 5.2开发插件,但是,当我部署插件时,SonarQube服务器无法启动。 日志显示NoClassDefFound异常与谷歌番石榴类:SonarQube 5.2自定义插件产生NoClassDefFoundError

Caused by: java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableList 
at br.gov.tcu.plugins.pmd.PmdTcuPlugin.getExtensions(PmdTcuPlugin.java:48) ~[na:na] 
at org.sonar.server.plugins.ServerExtensionInstaller.installExtensions(ServerExtensionInstaller.java:55) ~[sonar-server-5.2.jar:na] 
... 15 common frames omitted 

当我跑mvn dependency:tree日志显示,番石榴实际上是包括在内,但包装插件之后,它不包含番石榴的jar:

[INFO] org.sonarsource.pmd:sonar-pmd-tcu-plugin:sonar-plugin:2.5 
[INFO] +- org.sonarsource.sonarqube:sonar-plugin-api:jar:5.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.java:sonar-java-plugin:sonar-plugin:3.7:provided 
[INFO] | +- org.sonarsource.java:java-surefire:jar:3.7:provided 
[INFO] | +- org.sonarsource.java:java-jacoco:jar:3.7:provided 
[INFO] | | +- org.jacoco:org.jacoco.core:jar:0.7.5.201505241946:provided 
[INFO] | | \- org.sonarsource.java:java-jacoco-previous:jar:3.7:provided 
[INFO] | +- org.sonarsource.java:java-squid:jar:3.7:provided 
[INFO] | | +- org.sonarsource.sslr:sslr-core:jar:1.21:provided 
[INFO] | | | \- cglib:cglib-nodep:jar:3.1:provided 
[INFO] | | +- org.codehaus.sonar.sslr-squid-bridge:sslr-squid-bridge:jar:2.6:provided 
[INFO] | | \- org.ow2.asm:asm-debug-all:jar:5.0.3:provided 
[INFO] | \- org.sonarsource.java:java-checks:jar:3.7:provided 
[INFO] +- org.sonarsource.xml:sonar-xml-plugin:sonar-plugin:1.4:provided 
[INFO] | +- xalan:xalan:jar:2.7.2:provided 
[INFO] | | \- xalan:serializer:jar:2.7.2:provided 
[INFO] | +- xerces:xercesImpl:jar:2.8.1:provided 
[INFO] | | \- xml-apis:xml-apis:jar:1.3.03:provided 
[INFO] | \- org.sonarsource.xml:xml-squid:jar:1.4:provided 
[INFO] |  \- org.codehaus.sonar:sonar-colorizer:jar:4.5.4:provided 
[INFO] |  \- org.codehaus.sonar:sonar-channel:jar:4.1:provided 
[INFO] +- org.sonarsource.sslr-squid-bridge:sslr-squid-bridge:jar:2.6.1:compile 
[INFO] | +- org.codehaus.sonar.sslr:sslr-core:jar:1.20:compile 
[INFO] | | +- com.google.guava:guava:jar:10.0.1:compile 
[INFO] | | \- com.google.code.findbugs:jsr305:jar:1.3.9:compile 
[INFO] | +- org.codehaus.sonar.sslr:sslr-xpath:jar:1.20:compile 
[INFO] | +- org.picocontainer:picocontainer:jar:2.14.1:compile 
[INFO] | +- org.slf4j:slf4j-api:jar:1.5.6:compile 
[INFO] | \- org.slf4j:jcl-over-slf4j:jar:1.5.6:compile 
[INFO] +- net.sourceforge.pmd:pmd-core:jar:5.4.0:compile 
[INFO] | +- com.beust:jcommander:jar:1.48: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.0:compile 
[INFO] +- net.sourceforge.pmd:pmd-xml:jar:5.4.0: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.sonarsource.sonarqube:sonar-testing-harness:jar:5.2:test 
[INFO] | +- org.assertj:assertj-guava:jar:1.3.1:test 
[INFO] | | \- org.assertj:assertj-core:jar:1.7.1:test (version selected from constraint [1.7.1,1.8.0)) 
[INFO] | +- com.googlecode.json-simple:json-simple:jar:1.1.1:test 
[INFO] | +- com.google.code.gson:gson:jar:2.3.1:test 
[INFO] | +- junit:junit:jar:4.12:test 
[INFO] | | \- org.hamcrest:hamcrest-core:jar:1.3:test 
[INFO] | +- com.tngtech.java:junit-dataprovider:jar:1.9.2:test 
[INFO] | +- org.hamcrest:hamcrest-all:jar:1.3:test 
[INFO] | +- org.mockito:mockito-core:jar:1.10.19:test 
[INFO] | | \- org.objenesis:objenesis:jar:2.1:test 
[INFO] | \- commons-lang:commons-lang:jar:2.6:provided 
[INFO] +- org.easytesting:fest-assert:jar:1.4:test 
[INFO] | \- org.easytesting:fest-util:jar:1.1.6:test 
[INFO] +- org.mockito:mockito-all:jar:1.9.5:test 
[INFO] \- commons-io:commons-io:jar:2.4:test 

我POM看起来是这样的:

<parent> 
    <groupId>org.sonarsource.parent</groupId> 
    <artifactId>parent</artifactId> 
    <version>29</version> 
    </parent> 

    ... 

    <properties> 
    <!-- Configuration for sonar-packaging-plugin --> 
    <sonar.pluginKey>pmd-tcu</sonar.pluginKey> 
    <sonar.pluginName>PMD-TCU</sonar.pluginName> 
    <sonar.pluginClass>br.gov.tcu.plugins.pmd.PmdTcuPlugin</sonar.pluginClass> 
    <sonar.pluginDescription><![CDATA[Analyze Java code with <a href="http://pmd.sourceforge.net/">PMD</a>.]]></sonar.pluginDescription> 
    <sonar.requiresPlugin>java:${sonar-java.version}</sonar.requiresPlugin> 
    <sonar.requiresPlugin>xml:${sonar-xml.version}</sonar.requiresPlugin> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>org.sonarsource.sonarqube</groupId> 
     <artifactId>sonar-plugin-api</artifactId> 
     <scope>provided</scope> 
     <version>5.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.sonarsource.java</groupId> 
     <artifactId>sonar-java-plugin</artifactId> 
     <type>sonar-plugin</type> 
     <version>3.7</version> 
     <scope>provided</scope> 
     <exclusions> 
     <exclusion> 
      <groupId>org.codehaus.sonar</groupId> 
      <artifactId>sonar-plugin-api</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.sonarsource.xml</groupId> 
     <artifactId>sonar-xml-plugin</artifactId> 
     <type>sonar-plugin</type> 
     <version>1.4</version> 
     <scope>provided</scope> 
     <exclusions> 
     <exclusion> 
      <groupId>org.codehaus.sonar</groupId> 
      <artifactId>sonar-plugin-api</artifactId> 
     </exclusion> 
     </exclusions> 
    </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</groupId> 
      <artifactId>sonar-plugin-api</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 

    ... 
    </dependencies> 
    ... 

可以见T我试图删除老版本的sonar-plugin-api,但它仍然不起作用。

我在这里错过了什么?

谢谢!

回答

1

我在这里发现了问题。 问题出在sonar-xml-plugin的依赖关系层次结构中。 我必须不仅排除旧版本sonar-plugin-api,还排除sonar-colorizer依赖项。

因此,为了解决这个问题,我不得不改变这种依赖关系:

<dependency> 
    <groupId>org.sonarsource.xml</groupId> 
    <artifactId>sonar-xml-plugin</artifactId> 
    <type>sonar-plugin</type> 
    <version>1.4</version> 
    <scope>provided</scope> 
    <exclusions> 
    <exclusion> 
     <groupId>org.codehaus.sonar</groupId> 
     <artifactId>sonar-plugin-api</artifactId> 
    </exclusion> 
    <exclusion> 
     <groupId>org.codehaus.sonar</groupId> 
     <artifactId>sonar-colorizer</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

随着这种变化,将番石榴罐子得到所需要的库的其余部分打包在一起。