在部署自定义规则(如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中找到,这是我在location sonarqube-4.2/web/deploy/plugins/squidjava/META-INF/lib/sslr-core-1.19.2.jar中找到的。
我是不是错过了一些步骤来实现默认声纳库?当前已安装的插件are(sonarqube-4.2/extensions/plugins):
我应该做什么来防止上述异常(除了未部署提到的自定义插件)?
是否应该将必要的库直接绑定到自定义插件中?我以为声纳会把这样的图书馆捆绑起来。
发布于 2014-06-25 20:41:51
最后,我找到了这个问题的解决方案/解释:
在声纳从sonarqube-4.2/web/deploy/plugins/目录开始时,动态更新sonarqube-4.2/extensions/plugins目录。每个插件都应该在自己的META库目录中包含库目录,其中应该包含所有必要的库。
在我的例子中,:
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还必须包含指向以下库的链接:
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用户必须自己创建这样的构建,这些信息可能对他们很有用。
祝好运!
https://stackoverflow.com/questions/24407368
复制相似问题