本地調(diào)試執(zhí)行
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、多模塊需要創(chuàng)建一個新的子模塊,名字【aggregate-report】
a、新的子模塊添加需要掃描的模塊依賴【dependency】

<dependencies>
<!-- 顯式依賴所有子模塊,確保聚合報告能收集到數(shù)據(jù) -->
<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依賴

<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> <!-- ?關(guān)鍵 -->
</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>

<properties>
<sonar.coverage.jacoco.xmlReportPaths>
aggregate-report/target/site/jacoco-aggregate/jacoco.xml
</sonar.coverage.jacoco.xmlReportPaths>
</properties>
可執(zhí)行shell腳本,自動區(qū)分單模塊還是多模塊
!/bin/bash
set -e
========================
固定參數(shù)(可改成從外部傳入)
========================
SONAR_PROJECT_KEY="app-engine-test"
SONAR_HOST_URL="https://test-sonarqube.internal.com"
SONAR_TOKEN="squ_***"
SONAR_TIMEOUT=300
========================
獲取當(dāng)前項目根目錄絕對路徑
========================
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
========================
執(zhí)行 Maven + Jacoco + Sonar
========================
echo "?? 開始執(zhí)行: 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}