1*7e63c127SSorin Basca<?xml version="1.0" encoding="UTF-8"?> 2*7e63c127SSorin Basca 3*7e63c127SSorin Basca<!-- 4*7e63c127SSorin Basca Copyright (c) 2009, 2021 Mountainminds GmbH & Co. KG and Contributors 5*7e63c127SSorin Basca This program and the accompanying materials are made available under 6*7e63c127SSorin Basca the terms of the Eclipse Public License 2.0 which is available at 7*7e63c127SSorin Basca http://www.eclipse.org/legal/epl-2.0 8*7e63c127SSorin Basca 9*7e63c127SSorin Basca SPDX-License-Identifier: EPL-2.0 10*7e63c127SSorin Basca 11*7e63c127SSorin Basca Contributors: 12*7e63c127SSorin Basca Marc R. Hoffmann - initial API and implementation 13*7e63c127SSorin Basca--> 14*7e63c127SSorin Basca 15*7e63c127SSorin Basca<project name="Example Ant Build with JaCoCo Offline Instrumentation" default="rebuild" xmlns:jacoco="antlib:org.jacoco.ant"> 16*7e63c127SSorin Basca 17*7e63c127SSorin Basca <description> 18*7e63c127SSorin Basca Example Ant build file that demonstrates how JaCoCo can be used with 19*7e63c127SSorin Basca offline instrumentation. This requires preprocessing of the class files 20*7e63c127SSorin Basca before the test is launched and adding the JaCoCo agent to the classpath. 21*7e63c127SSorin Basca </description> 22*7e63c127SSorin Basca 23*7e63c127SSorin Basca <property name="src.dir" location="./src/main/java" /> 24*7e63c127SSorin Basca <property name="result.dir" location="./target" /> 25*7e63c127SSorin Basca <property name="result.classes.dir" location="${result.dir}/classes" /> 26*7e63c127SSorin Basca <property name="result.classes.instr.dir" location="${result.dir}/classes-instr" /> 27*7e63c127SSorin Basca <property name="result.report.dir" location="${result.dir}/site/jacoco" /> 28*7e63c127SSorin Basca <property name="result.exec.file" location="${result.dir}/jacoco.exec" /> 29*7e63c127SSorin Basca 30*7e63c127SSorin Basca <!-- Step 1: Import JaCoCo Ant tasks --> 31*7e63c127SSorin Basca <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"> 32*7e63c127SSorin Basca <classpath path="../../../lib/jacocoant.jar" /> 33*7e63c127SSorin Basca </taskdef> 34*7e63c127SSorin Basca 35*7e63c127SSorin Basca <target name="clean"> 36*7e63c127SSorin Basca <delete dir="${result.dir}" /> 37*7e63c127SSorin Basca </target> 38*7e63c127SSorin Basca 39*7e63c127SSorin Basca <target name="compile"> 40*7e63c127SSorin Basca <mkdir dir="${result.classes.dir}" /> 41*7e63c127SSorin Basca <javac srcdir="${src.dir}" destdir="${result.classes.dir}" debug="true" includeantruntime="false" /> 42*7e63c127SSorin Basca </target> 43*7e63c127SSorin Basca 44*7e63c127SSorin Basca <target name="instrument" depends="compile"> 45*7e63c127SSorin Basca <!-- Step 2: Instrument class files --> 46*7e63c127SSorin Basca <jacoco:instrument destdir="${result.classes.instr.dir}"> 47*7e63c127SSorin Basca <fileset dir="${result.classes.dir}" /> 48*7e63c127SSorin Basca </jacoco:instrument> 49*7e63c127SSorin Basca </target> 50*7e63c127SSorin Basca 51*7e63c127SSorin Basca 52*7e63c127SSorin Basca <target name="test" depends="instrument"> 53*7e63c127SSorin Basca <!-- Step 3: Run tests with instrumented classes --> 54*7e63c127SSorin Basca <java classname="org.jacoco.examples.parser.Main" fork="true"> 55*7e63c127SSorin Basca <!-- jacocoagent.jar must be on the classpath --> 56*7e63c127SSorin Basca <classpath> 57*7e63c127SSorin Basca <pathelement path="../../../lib/jacocoagent.jar"/> 58*7e63c127SSorin Basca <pathelement path="${result.classes.instr.dir}" /> 59*7e63c127SSorin Basca </classpath> 60*7e63c127SSorin Basca <!-- Agent is configured with system properties --> 61*7e63c127SSorin Basca <sysproperty key="jacoco-agent.destfile" file="${result.exec.file}"/> 62*7e63c127SSorin Basca <arg value="2 * 3 + 4"/> 63*7e63c127SSorin Basca <arg value="2 + 3 * 4"/> 64*7e63c127SSorin Basca <arg value="(2 + 3) * 4"/> 65*7e63c127SSorin Basca <arg value="2 * 2 * 2 * 2"/> 66*7e63c127SSorin Basca <arg value="1 + 2 + 3 + 4"/> 67*7e63c127SSorin Basca <arg value="2 * 3 + 2 * 5"/> 68*7e63c127SSorin Basca </java> 69*7e63c127SSorin Basca </target> 70*7e63c127SSorin Basca 71*7e63c127SSorin Basca <target name="report" depends="test"> 72*7e63c127SSorin Basca <!-- Step 4: Create coverage report --> 73*7e63c127SSorin Basca <jacoco:report> 74*7e63c127SSorin Basca 75*7e63c127SSorin Basca <!-- This task needs the collected execution data and ... --> 76*7e63c127SSorin Basca <executiondata> 77*7e63c127SSorin Basca <file file="${result.exec.file}" /> 78*7e63c127SSorin Basca </executiondata> 79*7e63c127SSorin Basca 80*7e63c127SSorin Basca <!-- the class files and optional source files ... --> 81*7e63c127SSorin Basca <structure name="JaCoCo Ant Example"> 82*7e63c127SSorin Basca <classfiles> 83*7e63c127SSorin Basca <fileset dir="${result.classes.dir}" /> 84*7e63c127SSorin Basca </classfiles> 85*7e63c127SSorin Basca <sourcefiles encoding="UTF-8"> 86*7e63c127SSorin Basca <fileset dir="${src.dir}" /> 87*7e63c127SSorin Basca </sourcefiles> 88*7e63c127SSorin Basca </structure> 89*7e63c127SSorin Basca 90*7e63c127SSorin Basca <!-- to produce reports in different formats. --> 91*7e63c127SSorin Basca <html destdir="${result.report.dir}" /> 92*7e63c127SSorin Basca <csv destfile="${result.report.dir}/report.csv" /> 93*7e63c127SSorin Basca <xml destfile="${result.report.dir}/report.xml" /> 94*7e63c127SSorin Basca </jacoco:report> 95*7e63c127SSorin Basca </target> 96*7e63c127SSorin Basca 97*7e63c127SSorin Basca <target name="rebuild" depends="clean,compile,instrument,test,report" /> 98*7e63c127SSorin Basca 99*7e63c127SSorin Basca</project> 100