在几个月来第一次从事我的一个项目之后,我想运行 Sonar 来检查我是否引入了任何新的违规行为。正如我之前做过很多次一样,我首先下载了最新的稳定版 Sonar (sonarqube-4.5.2) 然后使用 mvn sonar:sonar
一切都适用于 Sonar Way 配置文件,因此我决定切换到 Findbugs 配置文件。然而,在分析项目时,我收到以下警告:
[WARN] [13:21:45.287] Findbugs needs sources to be compiled. Please build project before executing sonar or check the location of compiled classes to make it possible for Findbugs to analyse your project.
我以前从未遇到过这个问题(在同一个项目上,但使用的是旧版本的sonar),所以我在网上搜索了一下,发现我可能需要定义sonar. binaries
将 Sonar 指向已编译的类。 (在我的案例中,Sonar 过去自动解决了这个问题)。尽管如此,我还是在我的 pom.xml
中添加了以下属性:
<sonar.sources>${basedir}/src/org/myproject</sonar.sources>
<sonar.binaries>${basedir}/target/classes/org/myproject</sonar.binaries>
<sonar.java.binaries>${basedir}/target/classes/org/myproject</sonar.java.binaries>
<sonar.tests>${basedir}/test/org/myproject</sonar.tests>
但是,当我看到 sonar.binaries
现在明确指向 Maven 的目标文件夹时,我仍然遇到同样的错误。
[INFO] [15:18:46.496] Source paths: src/org/myproject
[INFO] [15:18:46.496] Test paths: test/org/myproject
[INFO] [15:18:46.496] Binary dirs: target/classes/org/myproject
我目前的尝试:
- 已下载 sonarqube-5.0,但根本不起作用
- 修改了我的
pom.xml
以合并以下 Sonar 属性- sonar.sources --> 指向 src/org/myproject
- sonar.binaries --> 指向 target/classes/org/myproject
- sonar.java.binaries --> 指向 target/classes/org/myproject
- sonar.tests --> 指向 test/org/myproject
- 尝试了相同的属性,但使用了绝对路径。我还尝试只指定父文件夹(src、test、target)的路径。没有成功
- 我已将具有各种属性的
sonar-project.properties
文件添加到项目中,但没有成功 - 在运行
mvn sonar:sonar
之前使用各种 Maven 生命周期编译项目
我真的很困惑,因为这在过去就像一个魅力。
最佳答案
使用 Maven 运行 SonarQube 分析时,您不需要指定以下属性:
sonar.sources
sonar.tests
sonar.libraries
Sonar 二进制文件
,因为 SonarQube Maven 会为您做这件事。
显然你可以尝试覆盖它们,但你所做的是错误的,因为 Maven 编译成“target/classes”,所以“sonar.binaries”应该设置到这个文件夹(不是“target/classes/org/myproject” ).
因此,为了使其简单(实际上也更简单),只需从 POM 中删除这些属性即可。
关于java - Maven + Sonar + Findbugs : Findbugs needs sources to be compiled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28011038/