当前位置: 首页 > 知识库问答 >
问题:

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

养枫涟
2023-03-14

部署自定义规则(如https://github.com/sonarsource/sonar-java/blob/master/java-checks/src/main/java/org/sonar/java/checks/useLessimportcheck.java)后,启动Sonarqube4.2时,在sonar启动期间引发以下异常:

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中找到

我是不是缺省了一步来启动默认声纳库?当前安装的插件有(Sonarqube-4.2/extensions/plugins):

  • sonarqube-4.2/extensions/plugins/sonar-checkstyle-plugin-2.1.jar
  • sonarqube4.2/extensions/plugins/sonar-web-plugin-2.1.jar
  • Sonarqube-4.2/扩展/插件/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/扩展/插件/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

我应该怎么做来防止上面提到的异常(除了取消部署提到的自定义插件)?

共有1个答案

蒙光华
2023-03-14

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

sonarqube-4.2/web/deploy/plugins/directory在sonar启动期间从sonarqube-4.2/extensions/plugins目录动态更新。每个插件都应该在他的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
 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
 类似资料:
  • 在哪里可以找到用于将规则导入到Sonar的XML文件的好文档和/或模式?在http://javadocs.sonarsource.org/5.1/apidocs/org/Sonar/api/server/rule/rulesdefinitionxmlloader.html上有一些文档,但是它并不准确(例如,description标记为可选,但是Sonar如果缺少它就会失败),并且没有描述每个元素代

  • 授人以鱼,不如授人以渔。Dism++的能力是有限的,无法覆盖的所有用户的需求。因此给程序添加了自定义规则功能,方便高级用户打造自己的专属工具。 创建一个空白的自定义规则文件 我们只需要在Config目录新建一个 Custom*.xml 这样形式的xml文件即可(*表示任何字符串,比如Custom1.xml或者Custom我爱我的家.xml,另外文件以UTF8或者Unicode编码保存)。初始文件内

  • 自定义中间有突起的UITabBar,demo中高仿了gogobot app底部不规则的TabBar。 [Code4App.com]

  • 我花了一天的时间将所有PMD和Checkstyle规则迁移到新的Squid规则,因为PMD/Checkstyle规则被标记为不推荐使用。 规则:BadConstantName_S00115_Check/S00115 我们所有的枚举都是用camelCase而不是CONSTANT_NAME实现的,例如: 比: 规则:MethodCyclomatic复杂性 迁移后,该规则报告所有equals和hashc

  • 我使用checkstyle API编写了几个自定义checkstyle规则。它们使用Maven运行良好(在我将新项目作为依赖项添加到checkstyle插件之后)。 null

  • 我们在中基于BaseTreeVisitor实现了一个自定义规则https://github.com/SonarSource/sonar-java/tree/master/java-checks/src/main/java/org/sonar/java/checks如中所述http://docs.sonarqube.org/display/SONAR/Extending编码规则。我们能够部署它,它看