如何在同一项目中为 java 和 java 脚本配置 Sonarqube 扫描仪
How to configure Sonarqube scanner for java and javascript in the same project
我一直在尝试为包含 java 模块(核心)和 javascript 模块(网络)的 Maven 项目设置声纳扫描仪。
我可以获取 java 覆盖数据扫描并显示在我的本地声纳服务器上,或者 java 脚本,但不能同时获取两者。
这是我的声纳-project.properties 文件,其中 sonar.modules 属性 可以有 4 个值之一:
### below: select just one of the 4 possible values for sonar.modules
sonar.modules = core --> get java coverage data
sonar.modules = web --> get javascript coverage data
sonar.modules = core,web --> get only java coverage data
sonar.modules = web,core --> get only java coverage data
sonar.sources=src
# javascript coverage report
web.sonar.exclusions=src/main/webapp/js/lib/**/*.js
web.sonar.javascript.lcov.reportPath = test-output/coverage/lcov.info
# java coverage report
core.sonar.java.binaries = target/classes
core.sonar.java.libraries = ../web/target/scheduler-web-3.5.0-SNAPSHOT/WEB-INF/lib
core.sonar.java.test.libraries = ../web/target/scheduler-web-3.5.0-SNAPSHOT/WEB-INF/lib
core.sonar.jacoco.reportPath = target/jacoco.exec
core.sonar.junit.reportsPath = target/surefire-reports
core.sonar.jacoco.reportMissing.force.zero = true
我的解决方案的关键,基于以下已接受的答案:
顶层 POM 没有变化。
添加到 web/pom.xml:
<properties>
<sonar.javascript.lcov.reportPath>test-output/coverage/lcov.info</sonar.javascript.lcov.reportPath>
</properties>
基本上声纳不知道在哪里可以找到我的 lcov 文件。
您不应使用带有专用 sonar-project.properties
文件的 SonarQube 扫描仪来 运行 您的分析 - 而是依赖 Scanner for Maven.
要了解如何做到这一点,只需看一下 SonarQube 本身(包含 Java 和 JS)是如何分析的:
- 继续GitHub repository
- 然后查看 Web 模块的 server/sonar-web/pom.xml 文件,您会注意到:
<properties>
<!-- self-analysis -->
<sonar.sources>src/main/js,src/main/less</sonar.sources>
<sonar.tests>src/main/js</sonar.tests>
<sonar.test.inclusions>src/main/js/**/__tests__/**</sonar.test.inclusions>
<sonar.exclusions>src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/**</sonar.exclusions>
<yarn.script>build</yarn.script>
</properties>
我一直在尝试为包含 java 模块(核心)和 javascript 模块(网络)的 Maven 项目设置声纳扫描仪。
我可以获取 java 覆盖数据扫描并显示在我的本地声纳服务器上,或者 java 脚本,但不能同时获取两者。
这是我的声纳-project.properties 文件,其中 sonar.modules 属性 可以有 4 个值之一:
### below: select just one of the 4 possible values for sonar.modules
sonar.modules = core --> get java coverage data
sonar.modules = web --> get javascript coverage data
sonar.modules = core,web --> get only java coverage data
sonar.modules = web,core --> get only java coverage data
sonar.sources=src
# javascript coverage report
web.sonar.exclusions=src/main/webapp/js/lib/**/*.js
web.sonar.javascript.lcov.reportPath = test-output/coverage/lcov.info
# java coverage report
core.sonar.java.binaries = target/classes
core.sonar.java.libraries = ../web/target/scheduler-web-3.5.0-SNAPSHOT/WEB-INF/lib
core.sonar.java.test.libraries = ../web/target/scheduler-web-3.5.0-SNAPSHOT/WEB-INF/lib
core.sonar.jacoco.reportPath = target/jacoco.exec
core.sonar.junit.reportsPath = target/surefire-reports
core.sonar.jacoco.reportMissing.force.zero = true
我的解决方案的关键,基于以下已接受的答案:
顶层 POM 没有变化。
添加到 web/pom.xml:
<properties> <sonar.javascript.lcov.reportPath>test-output/coverage/lcov.info</sonar.javascript.lcov.reportPath> </properties>
基本上声纳不知道在哪里可以找到我的 lcov 文件。
您不应使用带有专用 sonar-project.properties
文件的 SonarQube 扫描仪来 运行 您的分析 - 而是依赖 Scanner for Maven.
要了解如何做到这一点,只需看一下 SonarQube 本身(包含 Java 和 JS)是如何分析的:
- 继续GitHub repository
- 然后查看 Web 模块的 server/sonar-web/pom.xml 文件,您会注意到:
<properties>
<!-- self-analysis -->
<sonar.sources>src/main/js,src/main/less</sonar.sources>
<sonar.tests>src/main/js</sonar.tests>
<sonar.test.inclusions>src/main/js/**/__tests__/**</sonar.test.inclusions>
<sonar.exclusions>src/main/js/libs/third-party/**/*,src/main/js/libs/require.js,src/main/js/**/__tests__/**</sonar.exclusions>
<yarn.script>build</yarn.script>
</properties>