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 ...
随机推荐
- Flask入门的第一个项目
前言: Flask简介:Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎. 想要学习flask,又非常迷茫,不知如何下手 ...
- PAT甲题题解-1111. Online Map (30)-PAT甲级真题(模板题,两次Dijkstra,同时记下最短路径)
题意:给了图,以及s和t,让你求s到t花费的最短路程.最短时间,以及输出对应的路径. 对于最短路程,如果路程一样,输出时间最少的. 对于最短时间,如果时间一样,输出节点数最少的. 如果最短路程 ...
- Backbone.js源码浅介
终于看到一个只有一千多行的js框架了,于是抱着一定可以看懂他的逻辑的心态,查看了他的整个源码,进去之后才发现看明白怎么用容易,看懂怎么写的就难了,于是乎有了这篇博客的标题:浅介,只能粗浅的介绍下Bac ...
- 20135202闫佳歆--week1 计算机是如何工作的
计算机是如何工作的 这一周我学习了计算机工作的相关知识. 最基础的,就是冯诺依曼体系结构结构,它最核心的思想是存储程序计算机,要点是:数字计算机的数制采用二进制:计算机应该按照程序顺序执行. 除了思想 ...
- Linux内核分析作业 NO.4
扒开系统调用的三层皮(上) 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...
- 12th final 发布评价II
1.约跑App——nice!:用户界面很是赏心悦目,给人一种很放松的感觉,与App的主题很配合,同时也在本周内把同学提出的bug都很好地完善了,而且采用了摄像头进行发布,整个发布过程清晰明朗不少.把约 ...
- redis集群的测试
原文:http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html 1.测试存取值 客户端连接集群redis-cli需要带上 -c ,redis-cli - ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- BroadcastReceiver介绍
参考资料 : 基础总结篇之五:BroadcastReceiver应用详解 BroadcastReceiver用于接收广播信息,可以通过sendBroadcast等方法进行发送.sendBroadcas ...
- 浅谈final修饰的变量
一直大概的知道final关键字的作用,但是自己实际工作中却很少用,除非在声明一些常量值的时候,今天忽然自己在项目中用一个map进行存储一些值.一开始我只是用private修饰的,心里想的是如果fina ...