我正在与Sonar进行分析,但出现以下错误:
Error during SonarQube Scanner execution
java.lang.IllegalStateException: No files nor directories matching 'target/classes'
在我的项目中,我具有目标目录,但没有类目录或文件,为了进行分析,应该在其中放置什么?
答案 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 替换正确生成的文件夹的值。