将java8标记添加到规则中并不会阻止它在非java8代码上播放

将java8标记添加到规则中并不会阻止它在非java8代码上播放,java,jenkins,sonarqube,sonar-runner,Java,Jenkins,Sonarqube,Sonar Runner,我正在与SonarQube合作,在jenkins服务器上运行java测试源代码。 我在文件sonar项目.properties中指定属性sonar.java.source=1.6,并且我有一个规则,其标记已手动添加值java8。理论上,这条规则不应该应用于我的分析,但它确实在这样做 这些是我的sonar-project.properties: # Required metadata sonar.projectKey=TestSonar sonar.projectName=Proyecto jav

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

这些是我的sonar-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 

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


PS:对不起,我的英语

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

让我解释一下:java分析器中只有少数规则明确针对
Java8
源代码(通常是以下版本)。SonarJava
4.15
大约20个。这些规则用
java8
标记显式标记,但它们的实现方式也取决于源版本。此标签仅适用于一种方式:

  • 规则是用默认标记定义的,用于描述它们的工作方式
  • 添加/删除标记不会改变其行为
因此,将
java8
标记添加到没有标记的规则不会使其仅对java8代码作出反应,必须在实现级别进行。同样,您不能简单地添加一个“test”标记并期望它只针对测试源进行播放

所以,在你的情况下,这根本不起作用。该规则将继续应用于任何代码,独立于标记


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

如果是模板规则,请提供规则密钥(squid:S???)或规则配置。如果你能提供一个问题复制FP的例子也会有所帮助。谢谢你的回答,是的,这是一个模板规则。我根据模板“应该处理与正则表达式匹配的注释”创建了一个自定义规则。在那之后,我只是用java8值标记我的规则谢谢Michael的解释,所以在我的例子中,如果我在我的源代码中使用这个版本的java,我需要用为java 6创建的规则设置一个新的质量配置文件?不,理论上你不应该做任何事情,所有规则都应该对检测到的Java版本做出相应的反应。现在,如果您确实希望某些规则仅在java6(或java8)中执行,但它们尚未以这种方式实现,那么您应该使用独特的质量概要文件。