向规则添加 java8 标签不会阻止它在非 java8 代码上播放

Adding java8 tag to a rule does not prevent it to be played on non-java8 code

我正在使用 SonarQube,运行 在 jenkins 服务器上测试 java 中的源代码。 我在文件 sonar-project.properties 中指定 属性 sonar.java.source=1.6 并且我有一个规则,其 标签已手动添加值为 java8 .理论上,这条规则不应该用于我的分析,但它仍然在这样做。

这些是我的声纳-project.properties:

# Required metadata
sonar.projectKey=TestSonar
sonar.projectName=Proyecto java TestSonar analizado con SonarQube Runner
sonar.projectVersion=1.0

# Comma-separated paths to directories with sources (required)
sonar.sources=src

# Language
sonar.language=java

# Encoding of the source files
sonar.sourceEncoding=UTF-8

# java version used by source files:
sonar.java.source=1.6

这是日志输出:

10:14:36.269 INFO  - Language is forced to java
10:14:36.273 INFO  - Load server rules
10:14:36.324 INFO  - Load server rules (done) | time=51ms
10:14:36.365 INFO  - Base dir: C:\Develop\TestSonar
10:14:36.365 INFO  - Working dir: c:\develop\TestSonar\.sonar
10:14:36.369 INFO  - Source paths: src
10:14:36.369 INFO  - Source encoding: UTF-8, default locale: es_AR
10:14:36.370 INFO  - Index files
10:14:36.393 INFO  - 3 files indexed
10:14:36.396 INFO  - Quality profile for java: Sonar way
10:14:36.765 INFO  - JaCoCoSensor: JaCoCo report not found : C:\Develop\TestSonar\target\jacoco.exec
10:14:36.765 INFO  - JaCoCoItSensor: JaCoCo IT report not found: C:\Develop\TestSonar\target\jacoco-it.exec
10:14:36.767 INFO  - ERROR: No files to be analyse found, skipping this execution.
10:14:36.791 INFO  - Sensor JavaSquidSensor
10:14:37.012 INFO  - Configured Java source version (sonar.java.source): 6
10:14:37.022 INFO  - JavaClasspath initialization...
10:14:37.022 WARN  - Bytecode of dependencies was not provided for analysis of source files, you might end up with less precise results. Bytecode can be provided using sonar.java.libraries 

this is the rule that should be omitted for this analysis due to the java version:

我是新手,如果您需要任何其他信息,请告诉我

PS: 对不起我的英文

这不是误报,这根本不是分析仪的工作方式。

让我解释一下:SonarJava 分析器中只有少数规则明确针对 java 8 源代码(通常是后续版本)。 SonarJava 大约 20 4.15。这些规则明确标有 java8 标签,但它们的实现方式也会根据源版本做出反应。这个标签机制只有一种方式:

  • 规则是使用默认标签定义的,描述了它们的工作方式。
  • Adding/removing 标签不会改变它们的行为。

因此,将 java8 标签添加到没有标签的规则不会使其仅对 java 8 代码做出反应,必须在实施级别完成。同样,您不能简单地添加一个 "test" 标签并期望它仅针对测试源播放。

因此,在您的情况下,这根本行不通。该规则将继续应用于任何代码,独立于标记。

注意:关于您在日志中收到的警告。您还应该向分析器提供 属性 sonar.java.binaries,因为没有它,SonarJava 将无法以最佳状态运行。它需要访问您项目的已编译字节码。从版本 4.12` SonarJava 开始,它也将在没有填充 属性 的情况下简单地分析失败。