ant+sonar+jacoco代码质量代码覆盖率扫描
使用ant构建的java web项目如何做sonar代码质量扫描?
以下就是实际遇到并成功使用的案例
一、做sonar扫描的准备工作
1.给web项目增加build.xml构建脚本。
2.下载jar包:jacocoant.jar;sonar-ant-task-2.2.jar
3.搭建一个sonar服务器
二、在build.xml中编写jacoco和sonar的脚本
案例的build.xml脚本
<?xml version="1.0" encoding="UTF-8"?>
<project name="Simple Java Project analyzed with the Sonar Ant Task" default="all" basedir="." xmlns:jacoco="antlib:org.jacoco.ant" xmlns:sonar="antlib:org.sonar.ant"> <!-- ========= Define the main properties of this project ========= -->
<property name="src.dir" value="src" />
<property name="build.dir" value="target" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="webRoot.dir" value="${basedir}/WebRoot"/>
<property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib"/>
<property name="reports.junit.xml.dir" value="${basedir}/target/junit"/> <path id="project.classpath">
<fileset dir="${lib.dir}">
<include name="*.jar"/>
</fileset>
<!--<fileset dir="${basedir}/lib">
<include name="*.jar" />
</fileset> -->
<pathelement path="${basedir}/WebRoot/WEB-INF/lib"/>
</path> <property name="sonar.host.url" value="http://172.31.65.167:9000/" /> <!-- Define the Sonar properties -->
<property name="sonar.projectKey" value="com.ceair.ma:ma" />
<property name="sonar.projectName" value="ma" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.language" value="java" />
<property name="sonar.sources" value="src" />
<property name="sonar.binaries" value="target/classes" /> <property name="sonar.working.directory" value="target/sonar" />
<!--property name="sonar.surefire.reportsPath" value="sonar/build/surefire-reports/findbugs-result.xml" /-->
<property name="sonar.sourceEncoding" value="UTF-8" /> <!-- sonar使用jacoco配置: -->
<property name="sonar.dynamicAnalysis" value="reuseReports" />
<property name="sonar.java.coveragePlugin" value="jacoco" />
<property name="sonar.jacoco.reportPath" value="jacoco.exec" /> <!-- Add your basic Sonar configuration below: sonar.jdbc.url, sonar.jdbc.username, etc. properties -->
<property name="sonar.jdbc.url" value="jdbc:mysql://172.31.65.167:3306/test?useUnicode=true&characterEncoding=utf8" />
<property name="sonar.jdbc.username" value="test" />
<property name="sonar.jdbc.password" value="000000" />
<property name="sonar.junit.reportsPath" value="target/sonar" /> <!-- 控制台打印sonar分析的详细信息-->
<!--<property name="sonar.verbose" value="true" /> --> <!-- ========= Define "regular" targets: clean, compile, ... ========= -->
<target name="clean">
<delete dir="${build.dir}" />
</target>
<target name="init">
<mkdir dir="${build.dir}" />
<mkdir dir="${classes.dir}" />
<mkdir dir="${reports.junit.xml.dir}" />
</target> <target name="compile" depends="init">
<javac srcdir="${src.dir}" destdir="${classes.dir}" source="1.6" target="1.6" debug="on"
deprecation="false" optimize="false" failonerror="true" >
<compilerarg line="-encoding UTF-8"/>
<classpath refid="project.classpath"></classpath>
</javac>
</target> <target name="test" depends="compile"> <taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
<classpath>
<path refid="project.classpath"/>
</classpath>
</taskdef> <!-- Import the JaCoCo Ant Task -->
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<!-- Update the following line, or put the "jacocoant.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="${basedir}/third/jacocoant.jar" />
</taskdef> <!-- Run your unit tests, adding the JaCoCo agent -->
<jacoco:coverage>
<junit fork="true" forkmode="once" printsummary="on" showoutput="true">
<!--<classpath location="${classes.dir}" />
<classpath refid="project.classpath" />--> <formatter type="xml" usefile="true"/>
<classpath>
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<pathelement path="${classes.dir}"/>
</classpath>
<batchtest todir="${reports.junit.xml.dir}">
<fileset dir="${classes.dir}">
<include name="**/*Test*.*" />
</fileset>
</batchtest>
</junit>
</jacoco:coverage> <!--<jacoco:report>
<executiondata>
<file file="jacoco.exec" />
</executiondata>
<structure name="ma project coverage report">
<classfiles>
<fileset dir="${basedir}/target/classes" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
<html destdir="${basedir}/target/report" />
<csv destfile="${basedir}/target/report/report.csv" />
<xml destfile="${basedir}/target/report/report.xml" />
</jacoco:report> --> </target> <!-- ========= Define Sonar target ========= -->
<target name="sonar" depends="compile">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!-- Update the following line, or put the "sonar-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="${basedir}/third/sonar-ant-task-2.2.jar" />
</taskdef> <!-- Execute Sonar -->
<sonar:sonar />
</target> <!-- ========= The main target "all" ========= -->
<target name="all" depends="clean,compile,test,sonar" /> </project>
build.xml
1.因为ant中没有像maven那样天然集成sonar,所以在脚本中需要加入很多sonar需要的属性。
2.需要一个target任务执行jacoco:coverage并生成代码覆盖率文件jacoco.exec;这里注意jacoco.exec是在<jacoco:coverage destfile="${basedir}/jacoco.exec">指定,如果没有destfile属性则默认在项目根目录生成名为jacoco.exec文件。这个生成的文件要和<property name="sonar.jacoco.reportPath" value="jacoco.exec" />对应,这步是把jacoco.exec交给sonar去解析。
<jacoco:coverage>
<junit fork="true" forkmode="once" printsummary="on" showoutput="true">
<formatter type="xml" usefile="true"/>
<classpath>
<fileset dir="${lib.dir}" includes="**/*.jar"/>
<pathelement path="${classes.dir}"/>
</classpath>
<batchtest todir="${reports.junit.xml.dir}">
<fileset dir="${classes.dir}">
<include name="**/*Test*.*" />
</fileset>
</batchtest>
</junit>
</jacoco:coverage>
3.这步非必须;如果要生成jacoco报表还可以添加一个<jacoco:report>,可以生成html、xml、csv类型的报表。
<jacoco:report>
<executiondata>
<file file="jacoco.exec" />
</executiondata>
<structure name="ma project coverage report">
<classfiles>
<fileset dir="${basedir}/target/classes" />
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${src.dir}" />
</sourcefiles>
</structure>
<html destdir="${basedir}/target/report" />
<csv destfile="${basedir}/target/report/report.csv" />
<xml destfile="${basedir}/target/report/report.xml" />
</jacoco:report>
4、代码覆盖率做完了就可以做sonar代码质量扫描了。
<target name="sonar" depends="compile">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<classpath path="${basedir}/third/sonar-ant-task-2.2.jar" />
</taskdef> <!-- 执行 Sonar -->
<sonar:sonar />
</target>
ant+sonar+jacoco代码质量代码覆盖率扫描的更多相关文章
- 测试框架:使用SONAR分析代码质量
介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd.checkstyl ...
- 使用 Sonar 检测代码质量
经历了一段时间的加班赶项目进度之后,今天终于闲下来了.忽然不知道干啥.于是,想着做点什么吧.突然想起了码云上面有个代码分析的功能,用的是 Sonar 于是想来玩玩这个. 一.下载Sonar,和初始化, ...
- 通过Sonar的代码质量报告学习【如何写安全高质量的代码】
1.不要用.size(),改用isEmpty() Using Collection.size() to test for emptiness works, but using Collection.i ...
- sonar的安装与代码质量检测实例
说明:sonar依赖数据库. mysql优化 1.笔者使用的是mysql数据库.首先对mysql做简单的优化配置. [root@localhost bin]# cat /etc/my.cnf [mys ...
- DevOps之持续集成SonarQube代码质量扫描
一.SonarQube介绍 SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...
- 代码质量检测-Sonar
一. Sonar简介 sonarqube系统是一个代码质量检测工具 由以下四个组件组成(https://docs.sonarqube.org/display/SONAR/Architecture+an ...
- sonar+Jenkins 构建代码质量自动化分析平台
1.Sonar 介绍 Sonar 是一个用于管理代码质量的开源工具,可以分析代码中的bug和漏洞以及Code Smells,支持20多种编程语言的检测,如java,c/c++,python,php等语 ...
- DEVOPS技术实践_05:sonar静态代码扫描
一.SonarQube静态代码扫描平台 1.1 安装 https://www.sonarqube.org/官网 1.2 下载软件包 https://www.sonarqube.org/download ...
- Windows安装使用SonarQube7.4 对java项目进行代码质量扫描
我这里使用7.4因为使用JDK是1.8 其它版本看下依赖版本就好 1.下载7.4版本安装包 https://binaries.sonarsource.com/CommercialDistributio ...
随机推荐
- ubuntu 下配置 开发环境
1. apache: sudo apt-get install apache2 安装好输入网址测试所否成功: http://localhost 2. mongo 已经安装好了 版本:2.4.8 ref ...
- mybatis mapper使用记录
insert://插入一条数据//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)//优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长int i ...
- 第二个Sprint冲刺第 七天(燃尽图)
- Daily Scrum 10.22
(写于10.22周四0晨) 昨天任务还未完成的继续完成任务. 每个人都查看自己的TFS,修改已经完成的任务状态,改为已关闭-已完成. 由于android studio运行过于慢,我们统一采取eclip ...
- Mysql存储引擎federated
Mysql数据库存储引擎federated(联盟) 意思就是把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表.->专门针对远程数据库的实现->一般情况下 ...
- PSP(4.6——4.12)以及周记录
1.PSP 4.6 8:30 10:30 20 100 博客 B Y min 12:00 13:00 5 55 Account A Y min 13:05 13:15 0 10 站立会议 A Y mi ...
- 开始学习Scheme
开始学习Scheme 函数式编程(Functional Programming)是在MIT研究人工智能(Artificial Intelligence)时发明的,其编程语言为Lisp.确切地说,L ...
- sniffer 和 debug flow
sniffer 和 debug flow sniffer 和 debug flow 复制模板,直接修改IP即可使用: diagnose sys session filter clear diagnos ...
- 【题解】 bzoj1207: [HNOI2004]打鼹鼠 (动态规划)
bzoj1207,懒得复制,戳我戳我 Solution: 挺傻逼的一个\(dp\),直接推就好了 这题在bzoj上的数据有点问题,题目保证每个时间点不会出现在同一位置两个地鼠,然而他有= =(还浪费我 ...
- 获取androdmanifest里面的meta-data
/* * Copyright 2017 JessYan * * Licensed under the Apache License, Version 2.0 (the "License&qu ...