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