自定义声纳规则 - ClassNotFoundException:com.sonar.sslr.api.AstAndTokenVisitor

时间:2014-06-25 11:25:18

标签: java gradle sonarqube

部署自定义规则(如https://github.com/SonarSource/sonar-java/blob/master/java-checks/src/main/java/org/sonar/java/checks/UselessImportCheck.java)后,当我启动SonarQube 4.2时,在声纳启动期间抛出以下异常:

Caused by: java.lang.ClassNotFoundException: com.sonar.sslr.api.AstAndTokenVisitor
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) ~[plexus-classworlds-2.2.3.jar:na]
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244) ~[plexus-classworlds-2.2.3.jar:na]
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230) ~[plexus-classworlds-2.2.3.jar:na]
    ... 44 common frames omitted

上面提到的类应该在sslr-core-1.19.2.jar中找到,我在位置找到了 sonarqube-4.2 / web / deploy / plugins / squidjava / META-INF / lib / sslr-core- 1.19.2.jar

我是否错过了一些关于enhnance默认声纳库的步骤? 目前安装的插件是( sonarqube-4.2 / extensions / plugins ):

  • sonarqube-4.2 / extensions / plugins / sonar-checkstyle-plugin-2.1.jar
  • sonarqube-4.2 / extensions / plugins / sonar-web-plugin-2.1.jar
  • sonarqube-4.2 / extensions / plugins / sonar-jacoco-plugin-2.2.1.jar
  • sonarqube-4.2 / extensions / plugins / sonar-java-plugin-2.2.1.jar
  • sonarqube-4.2 / extensions / plugins / sonar-surefire-plugin-2.2.1.jar
  • sonarqube-4.2 / extensions / plugins / sonar-pmd-plugin-2.2.jar
  • sonarqube-4.2 / extensions / plugins / sonar-findbugs-plugin-2.2.1.jar
  • sonarqube-4.2 /扩展/插件/声纳的鱿鱼-java的插件-2.2.1.jar

我应该怎么做才能防止上述异常(取消部署提到的自定义插件除外)?

应该将必要的库直接捆绑到自定义插件中吗?我希望声纳可以捆绑这样的库。

1 个答案:

答案 0 :(得分:2)

最后,我找到了问题的解决方案/解释:

sonarqube-4.2 / web / deploy / plugins / 目录在声纳启动期间从 sonarqube-4.2 / extensions / plugins <动态更新/ em> 目录。每个插件都应该在他的META-INF jar中有 lib 目录。这样的lib目录应该包含所有必需的库。

就我而言:

META-INF/lib/asm-5.0.1.jar
META-INF/lib/java-checks-2.2.1.jar
META-INF/lib/java-squid-2.2.1.jar
META-INF/lib/jaxen-1.1.4.jar
META-INF/lib/sslr-core-1.19.2.jar
META-INF/lib/sslr-squid-bridge-2.3.jar
META-INF/lib/sslr-xpath-1.19.2.jar

META-INF / MANIFEST.MF 除了重要的定义之外还必须包含这些库的链接:

 Plugin-Dependencies: META-INF/lib/java-checks-2.2.1.jar META-INF/lib/j
 axen-1.1.4.jar META-INF/lib/sslr-squid-bridge-2.3.jar META-INF/lib/ss
 lr-xpath-1.19.2.jar META-INF/lib/asm-5.0.1.jar META-INF/lib/sslr-core
 -1.19.2.jar META-INF/lib/java-squid-2.2.1.jar

完成这些步骤后,部署成功并准备好使用插件。

上面提到的事实对于MAVEN用户来说可能很清楚(有很多pom文件),但是gradle用户必须自己创建这样的版本,这些信息可能对他们有用。

祝你好运!