AbstractCoverageTask.java revision 1d8389bf86f8a49d31bb5182b3ec1592e2f7289a
1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/*******************************************************************************
2283abfa148b749678924b5e75eabd35a2d58f9f8Marc R. Hoffmann * Copyright (c) 2009, 2014 Mountainminds GmbH & Co. KG and Contributors
3e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * All rights reserved. This program and the accompanying materials
4e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
5e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * which accompanies this distribution, and is available at
6e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
7e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
8e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Contributors:
9e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *    Brock Janiczak - initial API and implementation
10e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *
11e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov *******************************************************************************/
12e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpackage org.jacoco.ant;
13e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
14e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.File;
15e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport java.io.IOException;
16e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
17e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.apache.tools.ant.BuildException;
18e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.apache.tools.ant.Task;
19e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.agent.AgentJar;
20e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovimport org.jacoco.core.runtime.AgentOptions;
21e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/**
23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Base class for all coverage tasks that require agent options
24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */
25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class AbstractCoverageTask extends Task {
26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private final AgentOptions agentOptions;
28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private boolean enabled;
30e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
31e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Create default agent options
33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	protected AbstractCoverageTask() {
35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		super();
36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions = new AgentOptions();
37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		enabled = true;
38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
40e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @return Whether or not the current task is enabled
42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public boolean isEnabled() {
44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		return enabled;
45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets whether or not the current task is enabled
49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param enabled
51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Enablement state of the task
52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setEnabled(final boolean enabled) {
54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		this.enabled = enabled;
55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Gets the currently configured agent options for this task
59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @return Configured agent options
61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
62e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public AgentOptions getAgentOptions() {
63e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		return agentOptions;
64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
66e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the location to write coverage execution data. Default is current
68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * working directory
69e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param file
71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Location to write coverage execution data
72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setDestfile(final File file) {
74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setDestfile(file.getAbsolutePath());
75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Append execution coverage data if a coverage file is already present.
79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Default is <code>true</code>
80e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
81e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param append
82e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            <code>true</code> to append execution data to an existing file
83e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
84e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setAppend(final boolean append) {
85e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setAppend(append);
86e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
87e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
88e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
89e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * List of wildcard patterns classes to include for instrumentation. Default
90e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * is <code>*</code>
91e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
92e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param includes
93e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Wildcard pattern of included classes
94e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
95e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setIncludes(final String includes) {
96e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setIncludes(includes);
97e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
98e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
99e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
100e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * List of wildcard patterns classes to exclude from instrumentation.
101e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Default is the empty string, no classes excluded
102e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
103e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param excludes
104e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Wildcard pattern of excluded classes
105e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
106e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setExcludes(final String excludes) {
107e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setExcludes(excludes);
108e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
109e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
110e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
111e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * List of wildcard patterns for classloaders that JaCoCo will not
112e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * instrument classes from. Default is
113e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * <code>sun.reflect.DelegatingClassLoader</code>
114e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
115e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param exclClassLoader
116e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Wildcard pattern of class loaders to exclude
117e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
118e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setExclClassLoader(final String exclClassLoader) {
119e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setExclClassloader(exclClassLoader);
120e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
121e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
122e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
123310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	 * Sets whether classes from the bootstrap classloader should be
124310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	 * instrumented.
125310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	 *
1261d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann	 * @param include
127310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	 *            <code>true</code> if bootstrap classes should be instrumented
128310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	 */
1291d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann	public void setInclBootstrapClasses(final boolean include) {
1301d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann		agentOptions.setInclBootstrapClasses(include);
131310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	}
132310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann
133310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann	/**
134e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the session identifier. Default is a auto-generated id
135e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
136e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param id
137e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            session identifier
138e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
139e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setSessionId(final String id) {
140e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setSessionId(id);
141e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
142e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
143e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
144e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Dump coverage data on VM termination. Default is <code>true</code>
145e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
146e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param dumpOnExit
147e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            <code>true</code> to write coverage data on VM termination
148e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
149e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setDumpOnExit(final boolean dumpOnExit) {
150e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setDumpOnExit(dumpOnExit);
151e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
152e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
153e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
154e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the output method. Default is <code>file</code>
155e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
156e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param output
157e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Output method
158e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
159e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setOutput(final String output) {
160e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setOutput(output);
161e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
162e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
163e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
164e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the IP address or hostname to bind to when output method is tcp
165e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * server or connect to when the output method is tcp client. Default is
166e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * <code>localhost</code>
167e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
168e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param address
169e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            Address to bind or connect to
170e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
171e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setAddress(final String address) {
172e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setAddress(address);
173e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
174e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
175e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
176e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the Port to bind to when the output method is tcp server or connect
177e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * to when the output method is tcp client. Default is <code>6300</code>
178e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
179e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param port
18057f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmann	 *            port to bind to or connect to
181e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
182e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setPort(final int port) {
183e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setPort(port);
184e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
185e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
186e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
187e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Sets the directory where all class files seen by the agent should be
188e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * dumped to.
189e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
190e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @param dir
191e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *            dump output location
192e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
193e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	public void setClassdumpdir(final File dir) {
194e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		agentOptions.setClassDumpDir(dir.getAbsolutePath());
195e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
196e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
197e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	/**
198f2450ec546d7fd07bf75047f7a4181f9ccc5a585Marc R. Hoffmann	 * Sets whether the agent should expose functionality via JMX.
199e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	 *
200e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	 * @param jmx
201e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	 *            <code>true</code> if JMX should be enabled
202e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	 */
203e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	public void setJmx(final boolean jmx) {
204e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann		agentOptions.setJmx(jmx);
205e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	}
206e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann
207e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann	/**
208e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * Creates JVM argument to launch with the specified JaCoCo agent jar and
209e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * the current options
210e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 *
211e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 * @return JVM Argument to pass to new VM
212e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	 */
213e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	protected String getLaunchingArgument() {
214e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		return getAgentOptions().getVMArgument(getAgentFile());
215e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
216e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
217e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	private File getAgentFile() {
218e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		try {
219e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			File agentFile = null;
220e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			final String agentFileLocation = getProject().getProperty(
221e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov					"_jacoco.agentFile");
222e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			if (agentFileLocation != null) {
223e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				agentFile = new File(agentFileLocation);
224e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			} else {
225e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				agentFile = AgentJar.extractToTempLocation();
226e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov				getProject().setProperty("_jacoco.agentFile",
227e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov						agentFile.toString());
228e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			}
229e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
230e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			return agentFile;
231e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		} catch (final IOException e) {
232e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov			throw new BuildException("Unable to extract agent jar", e,
233e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov					getLocation());
234e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov		}
235e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov	}
236e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov
237e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov}
238