本地调试执行
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_PATH"
mvn -Dmaven.test.skip=false -B
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
-U clean verify {SONAR_PROJECT_KEY}
-Dsonar.host.url={SONAR_TOKEN}
-Dsonar.coverage.jacoco.xmlReportPaths={SONAR_TIMEOUT}









网友评论