我正在使用Sonar进行分析,但我得到以下错误:
Error during SonarQube Scanner execution java.lang.IllegalStateException: No files nor directories matching 'target/classes'
字符串在我的项目中,我有目标目录,但没有类目录或文件,什么应该在那里的分析工作?
q9rjltbz1#
其中一个原因可能是,如果您在构建项目之前进行分析,Sonar无法找到该目录。在开始使用maven构建项目之前,target/classes目录并不存在。尝试使用此值来解决问题:
target/classes
sonar.java.binaries=target
字符串或
sonar.java.binaries=.
型
bzzcjhmw2#
有时有些模块不能生成源代码,例如,使用Maven时,这些模块打包为“pom”。为了避免sonar分析它们,请在sonar.properties中指定属性sonar.modules,其中包含生成源。
clj7thdc3#
我相信您已经了解了这一点。然而,对于使用Maven构建的Java项目,您需要做以下事情。如果你使用的路径是“**/target/classes”,那么我们假设你使用的是Maven来构建。你需要执行“mvn clean package”来让你的Sonarqube Scanner工作。使用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 Scanner for Maven,那么您将其放入属性文件中。)
2o7dmzc54#
对于那些发现自己在这个线程上的可怜的迷失灵魂,当从Gradle 4.x迁移到5.x时,你可能会遇到这个错误,因为classes文件夹从classes重命名为app_classes,它不再是variant/flavor,而是variantFlavor-你可以通过构建你的应用程序并在build文件夹中查看来验证我不得不在我的构建中更改这个sonarqube属性。gradleproperty "sonar.java.binaries", "build/intermediates/app_classes/betaDebug,build/tmp/kotlin-classes/betaDebug"个
classes
app_classes
variant/flavor
variantFlavor
property "sonar.java.binaries", "build/intermediates/app_classes/betaDebug,build/tmp/kotlin-classes/betaDebug"
wecizke35#
来自@bsaunter的答案有效。我必须补充的是,当从gradle 5.x迁移到6.x时,您也可能会遇到此错误,进入您的build/intermediate/javac/debug文件夹并查看生成sonarqube的文件夹,该文件夹的名称可能是“classes”在你的项目文件夹中的wherever文件上查找这个属性“sona.java.binaries”,并将正确生成的文件夹的值替换为sonarqube。
7cwmlq896#
对我来说,它给出这个错误是因为我从github克隆项目后忘记执行maven clean install。所以你也应该在运行sonar命令之前尝试执行“maven clean install”!要执行“maven clean install”,你可以去终端写“maven clean install”
6条答案
按热度按时间q9rjltbz1#
其中一个原因可能是,如果您在构建项目之前进行分析,Sonar无法找到该目录。在开始使用maven构建项目之前,
target/classes
目录并不存在。尝试使用此值来解决问题:
字符串
或
型
bzzcjhmw2#
有时有些模块不能生成源代码,例如,使用Maven时,这些模块打包为“pom”。
为了避免sonar分析它们,请在sonar.properties中指定属性sonar.modules,其中包含生成源。
clj7thdc3#
我相信您已经了解了这一点。然而,对于使用Maven构建的Java项目,您需要做以下事情。
如果你使用的路径是“**/target/classes”,那么我们假设你使用的是Maven来构建。你需要执行“mvn clean package”来让你的Sonarqube Scanner工作。
使用maven编译并打包到标准目录(“./target/classes”)后,只需将适当的设置传递给扫描程序(通过配置文件或命令行)。下面是通过命令行传递的示例。
字符串
请注意,我在sonar.sources和sonar.java.binaries设置中使用了一个相对路径。我在Jenkins构建管道中这样做,并使其可配置,因为我也在构建过程中构建PHP并使用Composer,Gulp,npm和其他工具。(如果您使用SonarQube Scanner for Maven,那么您将其放入属性文件中。)
2o7dmzc54#
对于那些发现自己在这个线程上的可怜的迷失灵魂,当从Gradle 4.x迁移到5.x时,你可能会遇到这个错误,因为classes文件夹从
classes
重命名为app_classes
,它不再是variant/flavor
,而是variantFlavor
-你可以通过构建你的应用程序并在build文件夹中查看来验证我不得不在我的构建中更改这个sonarqube属性。gradle
property "sonar.java.binaries", "build/intermediates/app_classes/betaDebug,build/tmp/kotlin-classes/betaDebug"
个wecizke35#
来自@bsaunter的答案有效。我必须补充的是,当从gradle 5.x迁移到6.x时,您也可能会遇到此错误,进入您的build/intermediate/javac/debug文件夹并查看生成sonarqube的文件夹,该文件夹的名称可能是“classes”
在你的项目文件夹中的wherever文件上查找这个属性“sona.java.binaries”,并将正确生成的文件夹的值替换为sonarqube。
7cwmlq896#
对我来说,它给出这个错误是因为我从github克隆项目后忘记执行maven clean install。所以你也应该在运行sonar命令之前尝试执行“maven clean install”!要执行“maven clean install”,你可以去终端写“maven clean install”