首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义声纳规则- ClassNotFoundException: com.sonar.sslr.api.AstAndTokenVisitor

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

Stack Overflow用户
提问于 2014-06-25 11:25:17
回答 1查看 986关注 0票数 0

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

代码语言:javascript
复制
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中找到,这是我在location sonarqube-4.2/web/deploy/plugins/squidjava/META-INF/lib/sslr-core-1.19.2.jar中找到的。

我是不是错过了一些步骤来实现默认声纳库?当前已安装的插件are(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/extensions/plugins/sonar-squid-java-plugin-2.2.1.jar

我应该做什么来防止上述异常(除了未部署提到的自定义插件)?

是否应该将必要的库直接绑定到自定义插件中?我以为声纳会把这样的图书馆捆绑起来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-25 20:41:51

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

在声纳从sonarqube-4.2/web/deploy/plugins/目录开始时,动态更新sonarqube-4.2/extensions/plugins目录。每个插件都应该在自己的META库目录中包含库目录,其中应该包含所有必要的库。

在我的例子中,

代码语言:javascript
复制
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/MANIFEST.MF还必须包含指向以下库的链接:

代码语言:javascript
复制
 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用户必须自己创建这样的构建,这些信息可能对他们很有用。

祝好运!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24407368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档