Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sonarqube错误java.lang.ClassCastException:org.sonar.java.resolve.SemanticModel无法强制转换为org.sonar.java.resolve.SemanticModel_Java_Sonarqube_Sonar Runner - Fatal编程技术网

Sonarqube错误java.lang.ClassCastException:org.sonar.java.resolve.SemanticModel无法强制转换为org.sonar.java.resolve.SemanticModel

Sonarqube错误java.lang.ClassCastException:org.sonar.java.resolve.SemanticModel无法强制转换为org.sonar.java.resolve.SemanticModel,java,sonarqube,sonar-runner,Java,Sonarqube,Sonar Runner,您好,我根据java web plugin 3.5中的一些检查(pom中对java checks 3.5的依赖性)为sonar 5.1.2编写了自己的插件,当我尝试对项目运行分析时,我得到错误: Caused by: java.lang.ClassCastException: org.sonar.java.resolve.SemanticModel cannot be cast to org.sonar.java.resolve.SemanticModel at org.sonar.ja

您好,我根据java web plugin 3.5中的一些检查(pom中对java checks 3.5的依赖性)为sonar 5.1.2编写了自己的插件,当我尝试对项目运行分析时,我得到错误:

Caused by: java.lang.ClassCastException: org.sonar.java.resolve.SemanticModel cannot be cast to org.sonar.java.resolve.SemanticModel
    at org.sonar.java.checks.SubscriptionBaseVisitor.scanFile(SubscriptionBaseVisitor.java:32)
    at org.sonar.java.model.VisitorsBridge.visitFile(VisitorsBridge.java:123)
    at org.sonar.java.ast.JavaAstScanner.simpleScan(JavaAstScanner.java:94)
    ... 38 more

例如,我从BadMethodName_S00100_Check.java复制到插件代码中,只更改了类名、描述和问题信息。为什么我会出错?其他不使用semanticModel的检查工作正常

这是因为类SemanticModel不是为在自定义规则中使用而设计的,也不是API的一部分。因此,您在运行时遇到了一个错误,因为该类不可用,而我们不能“禁止”您在编译期间使用它。有关更多详细信息,请参阅。此限制由SonarQube插件打包完成。我想错误信息应该是mroe明确的(是的,这是一个轻描淡写的说法)


如果您想访问语义信息,请使用树节点的语义API访问符号和类型。

我们无法根据提供的信息具体回答。但是,我可以说,您总是可以将一个类的实例强制转换为同一个类。因此,异常消息表示您有两个同名的不同类,如果它们由不同的
ClassLoader
s加载,则可能发生这种情况。为什么会出现这种情况在很大程度上取决于代码运行的上下文。谢谢John。在目录扩展/插件中,我放置了我自己的_plugin.jar(使用java squid 3.5)和sonar-java-plugin-3.5.jar,但问题只出现在那些使用SemanticModel的检查中。我需要两个罐子。我如何解决它?除非您已经将
org.sonar.java.resolve.SemanticModel
的类文件复制到您自己的JAR中,否则问题不太可能是您将JAR放在何处或提供哪些JAR。不过,既然您提到了java插件web,我推测在一个小程序中,您试图使用在该小程序之外以某种方式生成的
语义模型
对象,反之亦然。但这只是一个猜测;你还没有给我们太多的机会。