這里用到了3個插件,sonar-maven-plugin、jacoco-maven-plugin、maven-surefire-plugin,簡單介紹一下功能:
sonar-maven-plugin:代碼掃描、分析出不規代碼,配合jacoco-maven-plugin可以顯示出junit單元測試覆蓋率。
jacoco-maven-plugin:統計junit單元測試覆蓋率。
maven-surefire-plugin:可以配置運行哪些junit單元測試類。
這3個插件可以各自獨立運行,實現自己的功能。現在配置一個項目的pom.xml文件,記錄一下:
<profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.host.url> http://localhost:9000 </sonar.host.url> <!-- <sonar.inclusions> src/main/java/com/sl/service/**, src/main/java/com/xx/service/impl/**, src/main/java/com/sl/controller/TestController.java, src/main/java/com/sl/controller/ArticleController.java </sonar.inclusions> <sonar.exclusions> src/main/java/com/xx/service/impl/TestServiceImpl3.java </sonar.exclusions> --> </properties> <build> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.2</version> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.1</version> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <dataFile>target/jacoco.exec</dataFile> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <dependencies> <dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit47</artifactId> <version>2.19</version> </dependency> </dependencies> <configuration> <!--配置是否跳過測試用例執行--> <skipTests>false</skipTests> <includes> <include>**/ArticleServiceImplTest.java</include> </includes> <excludes> <exclude>**/ArticleControllerTest.java</exclude> </excludes> </configuration> </plugin> </plugins> </build> </profile> </profiles>
說明:
1、如果不配置jacoco,則sonar的控制台顯示的覆蓋率是0。
2、sonar中配置的sonar.inclusions、sonar.exclusions是指定掃描的代碼:
不影響單元測試和jacoco覆蓋率(項目/target/site/jacoco/index.html里面依然顯示全部的)。
影響sonar控制台的單元測試覆蓋率 ,實際上是它指定掃描代碼的單元測試覆蓋率 ,沒掃描到的不會統計。
3、surefire中skipTests為true時跳過單元測試。它里面的includes、excludes指定執行哪些單元測試,肯定影響sonar和jacoco的覆蓋率。
4、說明一下命令
sonar首次安裝插件,進入到項目跟目錄執行:mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar
運行sonar,不執行單元測試:mvn -U compile sonar:sonar -Denv=sonar -fail-never
運行sonar, 執行單元測試:mvn -U test sonar:sonar -Denv=sonar -fail-never
運行sonar, 執行單元測試:mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar,同首次安裝一樣。
只運行junit單元測試或者同時統計jacoco覆蓋率:mvn test