xref: /aosp_15_r20/external/jacoco/org.jacoco.examples/build/build-offline.xml (revision 7e63c1270baf9bfa84f5b6aecf17bd0c1a75af94)
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