gpt4 book ai didi

java - 自定义 Sonar 规则 - ClassNotFoundException : com. sonar.sslr.api.AstAndTokenVisitor

转载 作者:行者123 更新时间:2023-12-02 05:42:20 28 4
gpt4 key购买 nike

部署自定义规则(如 https://github.com/SonarSource/sonar-java/blob/master/java-checks/src/main/java/org/sonar/java/checks/UselessImportCheck.java )后,当我启动 SonarQube 4.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

我是否缺少一些增强默认 Sonar 库的步骤?当前安装的插件是(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

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

是否应该将必要的库直接捆绑到自定义插件中?我希望 Sonar 能够捆绑这样的库。

最佳答案

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

sonarqube-4.2/web/deploy/plugins/ 目录在 Sonar 启动期间从 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 用户必须自己创建这样的构建,这些信息可能对他们有用。

祝你好运!

关于java - 自定义 Sonar 规则 - ClassNotFoundException : com. sonar.sslr.api.AstAndTokenVisitor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24407368/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com