0

请帮帮我。我不知道为什么只缺少 javascript 静态代码分析 riports。

所以,我有一个包含多个模块的 Maven 项目和前端项目中的 javascript 代码。

  • 已安装 SonarJS 插件
  • 我正在运行: mvn clean install sonar:sonar
  • 我从 pom.xml 而不是 sonar-project.properties 配置声纳
  • 声纳版本:6.7 社区版

在声纳概述中,它具有 java 静态代码分析 riport 两个模块,但没有关于 javascript 代码。

这是我在父项目中的 pom.xml 设置。

 <?xml version="1.0" encoding="UTF-8"?>
 <project ... >
...
<version>0.0.1-SNAPSHOT</version>
<modules>
    <module>backend</module>
    <module>frontend</module>
</modules>
<properties>
    ...
    <!-- sonar -->
    <sonar.version>3.4.0.905</sonar.version>
    <sonar.host.url>http://my.sonar.domain.url</sonar.host.url>
    <sonar.login>asdsd43f8g7fs498u9s8df7s97zf9er97zf7</sonar.login>
    <sonar.javascript.file.suffixes>.js,.jsx,.vue</sonar.javascript.file.suffixes>
    <sonar.sources>src/main/</sonar.sources>
    <sonar.test>src/test/</sonar.test>
    <sonar.jacoco.itReportPath>${project.testresult.directory}/coverage/jacoco/jacoco-it.exec</sonar.jacoco.itReportPath>
    <sonar.jacoco.reportPath>${project.testresult.directory}/coverage/jacoco/jacoco.exec</sonar.jacoco.reportPath>
    <sonar.java.codeCoveragePlugin>jacoco</sonar.java.codeCoveragePlugin>
    <!-- For Java -->
    <sonar.junit.reportsPath>reports/java/surefire-reports</sonar.junit.reportsPath>

    <!-- For JavaScript -->
    <sonar.javascript.lcov.reportPath>reports/js/lcov.dat</sonar.javascript.lcov.reportPath>
    ...
</properties>
<dependencies> ... </dependencies>
<build>
    <pluginManagement>
        <plugins>
            ...
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar.version}</version>
                <executions>
                    <execution>
                        <id>sonar-run</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>sonar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            ....
        </plugins>
    </pluginManagement>
   </build>
</project>

更新:

我已经使用 -X 调试运行了声纳分析。下面的日志:

[DEBUG] 15:08:27.144 'src/main/resources/static/js/template/template.js' excluded by org.sonar.plugins.javascript.JavaScriptExclusionsFileFilter
[DEBUG] 15:08:27.145 'src/main/resources/static/js/navigation/navigationEvents.js' excluded by org.sonar.plugins.javascript.JavaScriptExclusionsFileFilter
[DEBUG] 15:08:27.145 'src/main/resources/static/js/navigation/navigation.js' excluded by org.sonar.plugins.javascript.JavaScriptExclusionsFileFilter
[DEBUG] 15:08:27.145 'src/main/resources/static/js/navigation/moduleLoader.js' excluded by org.sonar.plugins.javascript.JavaScriptExclusionsFileFilter

但没有任何排除设置。

4

3 回答 3

1

你在评论中写道:

sonar.javascript.exclusions=**/node_modules/**,**/bower_components/**,**/js/**

如果您没有在任何pom.xml文件中指定它,那么该值将从服务器获取。您可以通过打开:https://sonar.host/admin/settings?category=javascript或来查看配置Administration → Configuration → JavaSctript。接下来,您必须找到该JavaScript Exclusions部分:

JavaScript 排除部分

大概你也会看到**/js/**。从我的角度来看,您应该删除该条目,因为它没有意义。如果不能,则必须通过添加以下内容来覆盖默认值:

<sonar.javascript.exclusions>**/node_modules/**,**/bower_components/**</sonar.javascript.exclusions>

或者

<sonar.javascript.exclusions></sonar.javascript.exclusions>
于 2018-06-11T07:54:59.763 回答
0

我想说,首先你想尝试使用 sonar.properties 文件执行覆盖,只是为了弄清楚 - 你仍然缺少哪些键,最好是专门用于 js。此外,正确的设置可能取决于您使用的实际 Sonar 版本。

我看到的一件事是你有 sonar.lcov.javascript.reportPath 两次。哪一个是正确的(首先使用硬编码路径,以确保您获得报告)

其次,在我的项目文件中,我还必须指定要使用的插件(类似于 sonar.js.coveragePlugin = lcov )。也许您还想添加,因为您使用的是 lcov。

最后,我还设置了以下标志:sonar.dynamicAnalysis=reuseReports

这是重用构建期间生成的报告所必需的。

附带说明一下,我的配置是在 3 年前创建的,用于当时最新的声纳版本。Sonar 的新版本可能会有一些变化。

于 2018-06-08T09:04:57.527 回答
0

在包含 JS 代码的 maven 模块的 pom 中,设置 JS 代码的 sonar.sources (如果需要,可以进行测试)

于 2018-06-08T09:10:57.467 回答