执行 sonar 的 findbug 功能的时候报错:
mvn clean package -DskipTests=true org.codehaus.mojo:sonar-maven-plugin:2.6:sonar \
-Dsonar.sensor.inclusions=JavaSourceImporter,JavaSquidSensor,CpdSensor,FindbugsSensor,ProfileSensor \
-Dsonar.dynamicAnalysis=reuseReports \
-Dsonar.branch=dev_1.0 \
-Dsonar.host.url=http://xxx:9000/ \
-Dsonar.host.username=xxx \
-Dsonar.host.password=xxx \
-Dsonar.jdbc.url='jdbc:mysql://xxxx:3306/sonar?useUnicode=true&characterEncoding=utf8' \
-Dsonar.jdbc.username=mysql \
-Dsonar.jdbc.password=xx_mysql \
-Dsonar.sourceEncoding=UTF-8
执行的时候报错。
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.6:sonar (default-cli) on project xxx-parent: Can not execute SonarQube analysis: Unable to determine structure of project. Probably you use Maven Advanced Reactor Options, which is not supported by SonarQube and should not be used. -> [Help 1]
检查了下最近的变更,发现只有这一个地方变更比较可疑。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<!-- 加了这一行 -->
<dependencyReducedPomLocation>${basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
</configuration>
</execution>
</executions>
</plugin>
dependencyReducedPomLocation
默认是在工程下面,修改这一行导致的变化是,从原来的目录结构:
parent
|--all
|--target
|--xxx-1.0.jar
|--xxx-1.0.sources.jar
|--dependency-reduced-pom.xml
变成了
parent
|--all
|--target
|--xxx-1.0.jar
|--xxx-1.0.sources.jar
|--dependency-reduced-pom.xml
从而导致 sonar 去解析目录结构的时候,解析到这个 pom,无法识别报错。
删掉<dependencyReducedPomLocation>${basedir}/target/dependency-reduced-pom.xml</dependencyReducedPomLocation>
后恢复正常。