【发布时间】:2018-01-28 15:08:38
【问题描述】:
- 我在 sonarQube6.4 上并已升级到 6.5
- 声纳扫描仪是 3.0.3
- 现在升级后扫描仪会在源路径中有 java 文件时失败。如果我不扫描 java 文件,一切正常。
- 但是,如果我回滚使用 6.4 版本,一切正常,那么是否有任何回归?这是堆栈跟踪,当我使用 -X 命令运行扫描仪命令时。那么在 6.5 中是否要求提供所有已编译类的位置,有没有办法忽略它。
04:56:21.218 调试:传感器:JavaSquidSensor -> SurefireSensor -> JaCoCoSensor -> SonarJavaXmlFileSensor -> “php.ini”文件分析器 -> 零覆盖传感器 -> CPD 块索引器 04:56:21.218 信息:传感器 JavaSquidSensor [java] 04:56:21.558 信息:配置的 Java 源 版本(sonar.java.source):无 04:56:21.565 信息:JavaClasspath 初始化 04:56:21.570 信息: -------------------------------------------------- ---------------------- 04:56:21.571 信息:执行失败 04:56:21.571 信息: -------------------------------------------------- ---------------------- 04:56:21.571 信息:总时间:6.545s 04:56:21.707 信息:最终记忆: 51M/1083M 04:56:21.707 信息: -------------------------------------------------- ---------------------- 04:56:21.707 错误:SonarQube 扫描仪执行期间出错 org.sonar.squidbridge.api.AnalysisException:请提供编译好的 具有 sonar.java.binaries 属性的项目类 在 org.sonar.java.JavaClasspath.init(JavaClasspath.java:59) 在 org.sonar.java.AbstractJavaClasspath.getElements(AbstractJavaClasspath.java:281) 在 org.sonar.java.SonarComponents.getJavaClasspath(SonarComponents.java:141) 在 org.sonar.java.JavaSquid.(JavaSquid.java:83) 在 org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:83) 在 org.sonar.scanner.sensor.SensorWrapper.analysis(SensorWrapper.java:53) 在 org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88) 在 org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82) 在 org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68) 在 org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:78) 在 org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:179) 在 org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:144) 在 org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:129) 在 org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:261) 在 org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:256) 在 org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:245) 在 org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:144) 在 org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:129) 在 org.sonar.scanner.task.ScanTask.execute(ScanTask.java:47) 在 org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84) 在 org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:144) 在 org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:129) 在 org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:119) 在 org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:116) 在 org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60) 在 com.sun.proxy.$Proxy0.execute(未知来源) 在 org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233) 在 org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151) 在 org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123) 在 org.sonarsource.scanner.cli.Main.execute(Main.java:77) 在 org.sonarsource.scanner.cli.Main.main(Main.java:61) 04:56:21.710 调试:执行 getVersion 04:56:21.711 调试:执行 停止
当我使用 6.4 运行相同的程序时,它运行良好,我在控制台中看到的唯一警告是:
04:52:42.738 警告:未提供依赖项的字节码来分析源文件,您最终可能会得到不太精确的结果。可以使用 sonar.java.libraries 属性提供字节码
【问题讨论】:
-
插件版本很重要,看来你的两个SonarQube可能运行不同的SonarJava版本。
-
同意,在 6.4 中它是 sonar-java-plugin-4.9.0.9858.jar,而在 6.5 中它是 sonar-java-plugin-4.12.0.11033.jar,但我仍然相信这是一个回归,在新插件中,必须提供 .class 文件位置。我希望有一个选项来覆盖它