声纳分析中止,因为“没有文件或目录匹配“目标/类”

时间:2018-09-26 10:19:12

标签: java sonarqube

我正在与Sonar进行分析,但出现以下错误:

Error during SonarQube Scanner execution
java.lang.IllegalStateException: No files nor directories matching 'target/classes'

在我的项目中,我具有目标目录,但没有类目录或文件,为了进行分析,应该在其中放置什么?

5 个答案:

答案 0 :(得分:5)

原因之一可能是,如果在构建项目之前进行分析,Sonar找不到该目录。 在开始使用maven构建项目之前,target/classes目录不存在。

尝试使用此值来解决:

sonar.java.binaries=target

sonar.java.binaries=.

答案 1 :(得分:1)

我确定您已经知道了。但是,这是使用Maven构建的Java项目所需的操作。

如果您使用路径“ ** / target / classes”,那么假设您正在使用Maven进行构建。您将为Sonarqube扫描仪执行“ MVN清洁包装”。

使用maven编译并打包到标准目录(“ ./target/classes”)后,只需将适当的设置传递给扫描仪(通过配置文件或命令行)。下面是通过命令行传递示例。

        ${scanner_home}/bin/sonar-scanner 
            -Dsonar.login=<SONAR KEY>
            -Dsonar.projectKey=<PROJECT KEY>
            -Dsonar.branch.name=<BRANCH_NAME>
            -Dsonar.branch.target=<RELEASABLE BRANCH>
            -Dsonar.sources=./src
            -Dsonar.java.binaries=./target/classes

请注意,我正在为sonar.sources和sonar.java.binaries设置使用相对路径。我在Jenkins构建管道中执行此操作,并使其可配置,因为我还构建PHP并在构建过程中使用Composer,Gulp,npm和其他工具。 (如果您将SonarQube扫描仪用于Maven,则应将其放入属性文件中。)

答案 2 :(得分:1)

对于在此线程中发现自己的可怜失落的灵魂,当将class文件夹从classes重命名为app_classes并从gradle 4.x迁移到5.x时,您可能会遇到此错误。它不再是variant/flavor而是variantFlavor-您可以通过构建应用并查看构建文件夹来进行验证

我必须在build.gradle中更改此sonarqube属性

property "sonar.java.binaries", "build/intermediates/app_classes/betaDebug,build/tmp/kotlin-classes/betaDebug"

答案 3 :(得分:1)

有时某些模块无法生成源,例如,与Maven一起使用时,这些模块打包为“ pom”。

为避免声纳分析它们,请在您的 sonar.properties 中指定属性 sonar.modules ,其中那些是生成源。

答案 4 :(得分:1)

@bsanunter 的回答有效。 我必须补充一点,从 gradle 5.x 迁移到 6.x 时,您也可能会遇到此错误, 到您的 build/intermediate/javac/debug 文件夹并查看生成 sonarqube 的内容,该文件夹的名称可能是“类”

在项目文件夹中的任何文件上查找此属性“sonar.java.binaries”,并通过 sonarqube 替换正确生成的文件夹的值。