${session.executionRootDirectory} 不被 sonar-maven-plugin 识别
${session.executionRootDirectory} is not recognized by sonar-maven-plugin
我有多层嵌套的Maven项目,每个模块都可以参与全局集成测试。为了实现全局的多模块覆盖,我配置了 jacoco 以跨模块使用和共享相同的文件,使用 Maven 变量 ${session.executionRootDirectory}
:
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<propertyName>jacoco.failsafeArgLine</propertyName>
<destFile>${session.executionRootDirectory}/target/jacoco-it.exec</destFile>
</configuration>
</execution>
这样,每个模块都使用相同的数据文件,无论它在子模块中的嵌套有多深。我检查过,jacoco 在启动 "mvn clean install".
时生成了正确的数据文件
现在启动时出现问题mvn sonar:sonar
。似乎插件无法用真实路径替换该变量。我可以在日志中看到以下内容
[INFO] JaCoCoItSensor: JaCoCo IT report not found: /home/tomcat/.jenkins/jobs/MYJOB/workspace/${session.executionRootDirectory}/target/jacoco-it.exec
使用 @{session.executionRootDirectory}
时并没有更好地工作。
任何解决方法?
遵循a comment in this bug report at SonarSource,建议使用以下配置:
<plugin>
<groupId>com.github.goldin</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
<execution>
<id>set-sonar.jacoco.reportPath</id>
<goals>
<goal>set-properties</goal>
</goals>
<phase>initialize</phase>
<configuration>
<rawProperties>
sonar.jacoco.itReportPath = ${session.executionRootDirectory}/target/jacoco-it.exec
</rawProperties>
<addDollar>true</addDollar>
</configuration>
</execution>
</executions>
</plugin>
...不幸的是,它与 Maven 3.1+ 不兼容,我使用并从源代码构建 that fork,然后我能够使一切与 Maven 3.2.3 一起正常工作。
我有多层嵌套的Maven项目,每个模块都可以参与全局集成测试。为了实现全局的多模块覆盖,我配置了 jacoco 以跨模块使用和共享相同的文件,使用 Maven 变量 ${session.executionRootDirectory}
:
<execution>
<id>pre-integration-test</id>
<phase>pre-integration-test</phase>
<goals>
<goal>prepare-agent-integration</goal>
</goals>
<configuration>
<propertyName>jacoco.failsafeArgLine</propertyName>
<destFile>${session.executionRootDirectory}/target/jacoco-it.exec</destFile>
</configuration>
</execution>
这样,每个模块都使用相同的数据文件,无论它在子模块中的嵌套有多深。我检查过,jacoco 在启动 "mvn clean install".
时生成了正确的数据文件现在启动时出现问题mvn sonar:sonar
。似乎插件无法用真实路径替换该变量。我可以在日志中看到以下内容
[INFO] JaCoCoItSensor: JaCoCo IT report not found: /home/tomcat/.jenkins/jobs/MYJOB/workspace/${session.executionRootDirectory}/target/jacoco-it.exec
使用 @{session.executionRootDirectory}
时并没有更好地工作。
任何解决方法?
遵循a comment in this bug report at SonarSource,建议使用以下配置:
<plugin>
<groupId>com.github.goldin</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
<execution>
<id>set-sonar.jacoco.reportPath</id>
<goals>
<goal>set-properties</goal>
</goals>
<phase>initialize</phase>
<configuration>
<rawProperties>
sonar.jacoco.itReportPath = ${session.executionRootDirectory}/target/jacoco-it.exec
</rawProperties>
<addDollar>true</addDollar>
</configuration>
</execution>
</executions>
</plugin>
...不幸的是,它与 Maven 3.1+ 不兼容,我使用并从源代码构建 that fork,然后我能够使一切与 Maven 3.2.3 一起正常工作。