4

我有几个级别的嵌套 Maven 项目,每个模块都可以参与全局集成测试。为了获得全局的多模块覆盖,我使用 Maven 变量将 jacoco 配置为跨模块使用和共享相同的文件${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}

任何解决方法?

4

1 回答 1

1

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+ 不兼容,我使用并从fork的源构建,然后我能够使用 Maven 3.2.3 使一切正常工作。

于 2016-04-13T13:24:34.380 回答