jacoco 项目包含单模块和多模块

2025-08-20  本文已影响0人  Leoguo小哥

本地调试执行


mvn  -Dmaven.test.skip=false -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -U clean verify org.jacoco:jacoco-maven-plugin:0.8.8:report-aggregate sonar:sonar -Dsonar.projectKey=code-diff         -Dsonar.host.url=https://test-sonarqube.internal.com         -Dsonar.token=sqa_37c31****         -Dsonar.coverage.jacoco.xmlReportPaths=${pwd}/aggregate-report/target/site/jacoco/jacoco.xml #这里传绝对路径

1、多模块需要创建一个新的子模块,名字【aggregate-report】

a、新的子模块添加需要扫描的模块依赖【dependency】


image.png
<dependencies>
        <!-- 显式依赖所有子模块,确保聚合报告能收集到数据 -->
        <dependency>
            <groupId>com.app.engine</groupId>
            <artifactId>app-engine-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.app.engine</groupId>
            <artifactId>app-engine-service</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>com.app.engine</groupId>
            <artifactId>app-engine-web</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

b、新的子模块pom中添加jacoco的依赖

<build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.11</version>
                <executions>
                    <execution>
                        <id>jacoco-report-aggregate</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>report-aggregate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2、父pom中添加org.apache.maven和surefire依赖

image.png
<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.2.5</version>
                <configuration>
                    <skipTests>false</skipTests>
                    <testFailureIgnore>true</testFailureIgnore>
                    <argLine>${jacocoArgLine}</argLine> <!-- ✅关键 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.11</version>
                <executions>
                    <execution>
                        <id>my-prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <propertyName>jacocoArgLine</propertyName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar-maven-plugin.version}</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.2.5</version>
                <configuration>
                    <skipTests>false</skipTests>
                    <testFailureIgnore>true</testFailureIgnore>
                </configuration>
            </plugin>

        </plugins>
image.png
<properties>
        <sonar.coverage.jacoco.xmlReportPaths>
            aggregate-report/target/site/jacoco-aggregate/jacoco.xml
        </sonar.coverage.jacoco.xmlReportPaths>
</properties>
可执行shell脚本,自动区分单模块还是多模块

!/bin/bash

set -e

========================

固定参数(可改成从外部传入)

========================

SONAR_PROJECT_KEY="app-engine-test"
SONAR_HOST_URL="https://test-sonarqube.internal.com"
SONAR_TOKEN="squ_***"
SONAR_TIMEOUT=300

========================

获取当前项目根目录绝对路径

========================

PROJECT_ROOT=$(pwd)

========================

判断是否是多模块项目

========================

if grep -q "<modules>" pom.xml; then
echo "✅ 检测到多模块项目"
REPORT_GOAL="org.jacoco:jacoco-maven-plugin:0.8.8:report-aggregate"

多模块使用绝对路径

REPORT_PATH="${PROJECT_ROOT}/aggregate-report/target/site/jacoco-aggregate/jacoco.xml"
else
echo "✅ 检测到单模块项目"
REPORT_GOAL="org.jacoco:jacoco-maven-plugin:0.8.8:report"

单模块使用相对路径

REPORT_PATH="target/site/jacoco/jacoco.xml"
fi

========================

执行 Maven + Jacoco + Sonar

========================

echo "🚀 开始执行: REPORT_GOAL" echo "📄 覆盖率报告路径:REPORT_PATH"

mvn -Dmaven.test.skip=false -B
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-U clean verify {REPORT_GOAL} sonar:sonar \ -Dsonar.projectKey={SONAR_PROJECT_KEY}
-Dsonar.host.url={SONAR_HOST_URL} \ -Dsonar.token={SONAR_TOKEN}
-Dsonar.coverage.jacoco.xmlReportPaths={REPORT_PATH} \ -Dsonar.ws.timeout={SONAR_TIMEOUT}

上一篇 下一篇

猜你喜欢

热点阅读