关于在 react-native 项目上运行声纳分析得到与 sonar.java.binaries 属性相关的错误

Posted

技术标签:

【中文标题】关于在 react-native 项目上运行声纳分析得到与 sonar.java.binaries 属性相关的错误【英文标题】:On running sonar analysis on react-native project getting error related to sonar.java.binaries property 【发布时间】:2018-12-14 03:04:39 【问题描述】:

我有一个用 javascript 编写的 react-native 项目,我正在尝试对其运行声纳分析。

我为此设置了声纳服务器,并且我尝试运行分析的系统安装了声纳扫描仪、npm 和所有其他项目依赖项。

但是,当我对 react-native 项目运行声纳分析时,出现以下错误:

ERROR: Error during SonarQube Scanner execution
org.sonar.squidbridge.api.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
    at org.sonar.java.JavaClasspath.init(JavaClasspath.java:59)
    at org.sonar.java.AbstractJavaClasspath.getElements(AbstractJavaClasspath.java:281)
    at org.sonar.java.SonarComponents.getJavaClasspath(SonarComponents.java:141)
    at org.sonar.java.JavaSquid.<init>(JavaSquid.java:83)
    at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:83)
    at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
    at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
    at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
    at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
    at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
    at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:180)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:288)
    at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:283)
    at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:261)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.task.ScanTask.execute(ScanTask.java:48)
    at org.sonar.scanner.task.TaskContainer.doAfterStart(TaskContainer.java:84)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:121)
    at org.sonar.scanner.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:121)
    at org.sonar.batch.bootstrapper.Batch.doExecuteTask(Batch.java:116)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:111)
    at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
    at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
    at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:77)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)

【问题讨论】:

【参考方案1】:

遇到了同样的问题,想知道 java 文件是从哪里进入节点项目的。然后通过文件搜索,我在 node_modules 文件夹中找到了几个 java 类。能够通过在声纳属性文件中排除它们来继续前进。

sonar.exclusions=test/**, node_modules/**

【讨论】:

【参考方案2】:

错误信息其实很清楚:

请为您的项目提供带有 sonar.java.binaries 属性的编译类

您的项目包含 Java 文件,如果不提供已编译的 .class 文件,则无法对其进行分析。您必须首先编译(并将类文件位置提供给分析)或 exclude 分析中的 .java 文件。

【讨论】:

以上是关于关于在 react-native 项目上运行声纳分析得到与 sonar.java.binaries 属性相关的错误的主要内容,如果未能解决你的问题,请参考以下文章

从命令行运行声纳分析时出现链接错误(maven 项目)

使用单体项目的 Spotbugs 规则运行声纳扫描仪时出错?

模块“M1:M1”已经是项目“P1”的一部分

Detox E2E 测试不会在 react-native 项目上运行

在 iOS 设备上运行 clubbed swift 和 react-native 项目时出错

react-native入门,编写静态页面,集成原生项目