1e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/******************************************************************************* 2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 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; 21d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmannimport org.jacoco.core.runtime.AgentOptions.OutputMode; 22e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 23e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov/** 24e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Base class for all coverage tasks that require agent options 25e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 26e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikovpublic class AbstractCoverageTask extends Task { 27e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 28e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private final AgentOptions agentOptions; 29e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 30d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann private File destfile; 31d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann 32e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private boolean enabled; 33e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 34e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 35e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Create default agent options 36e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 37e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected AbstractCoverageTask() { 38e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov super(); 39e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions = new AgentOptions(); 40d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann destfile = new File(AgentOptions.DEFAULT_DESTFILE); 41e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov enabled = true; 42e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 43e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 44e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 45e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @return Whether or not the current task is enabled 46e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 47e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public boolean isEnabled() { 48e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov return enabled; 49e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 50e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 51e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 52e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets whether or not the current task is enabled 53e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 54e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param enabled 55e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Enablement state of the task 56e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 57e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setEnabled(final boolean enabled) { 58e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov this.enabled = enabled; 59e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 60e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 61e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 62d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann * Sets the location to write coverage execution data to. Default is 63d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann * <code>jacoco.exec</code>. 64e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 65e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param file 66d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann * Location to write coverage execution data to 67e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 68e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setDestfile(final File file) { 69d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann destfile = file; 70e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 71e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 72e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 73e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Append execution coverage data if a coverage file is already present. 74e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Default is <code>true</code> 75e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 76e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param append 77e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * <code>true</code> to append execution data to an existing file 78e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 79e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setAppend(final boolean append) { 80e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setAppend(append); 81e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 82e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 83e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 84e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * List of wildcard patterns classes to include for instrumentation. Default 85e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * is <code>*</code> 86e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 87e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param includes 88e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Wildcard pattern of included classes 89e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 90e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setIncludes(final String includes) { 91e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setIncludes(includes); 92e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 93e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 94e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 95e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * List of wildcard patterns classes to exclude from instrumentation. 96e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Default is the empty string, no classes excluded 97e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 98e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param excludes 99e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Wildcard pattern of excluded classes 100e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 101e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setExcludes(final String excludes) { 102e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setExcludes(excludes); 103e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 104e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 105e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 106e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * List of wildcard patterns for classloaders that JaCoCo will not 107e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * instrument classes from. Default is 108e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * <code>sun.reflect.DelegatingClassLoader</code> 109e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 110e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param exclClassLoader 111e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Wildcard pattern of class loaders to exclude 112e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 113e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setExclClassLoader(final String exclClassLoader) { 114e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setExclClassloader(exclClassLoader); 115e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 116e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 117e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 118310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann * Sets whether classes from the bootstrap classloader should be 119310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann * instrumented. 120310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann * 1211d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann * @param include 122310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann * <code>true</code> if bootstrap classes should be instrumented 123310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann */ 1241d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann public void setInclBootstrapClasses(final boolean include) { 1251d8389bf86f8a49d31bb5182b3ec1592e2f7289aMarc R. Hoffmann agentOptions.setInclBootstrapClasses(include); 126310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann } 127310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann 128310b7d14546c8f5e49f5e99475fb6001331ac4caMarc R. Hoffmann /** 12926daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann * Sets whether classes without source location should be instrumented. 13026daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann * 13126daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann * @param include 13226daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann * <code>true</code> if classes without source location should be 13326daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann * instrumented 13426daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann */ 13526daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann public void setInclNoLocationClasses(final boolean include) { 13626daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann agentOptions.setInclNoLocationClasses(include); 13726daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann } 13826daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann 13926daee44414eeecb0a7a63d7f6784fcf4cfe32faMarc R. Hoffmann /** 140e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets the session identifier. Default is a auto-generated id 141e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 142e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param id 143e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * session identifier 144e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 145e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setSessionId(final String id) { 146e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setSessionId(id); 147e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 148e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 149e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 150e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Dump coverage data on VM termination. Default is <code>true</code> 151e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 152e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param dumpOnExit 153e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * <code>true</code> to write coverage data on VM termination 154e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 155e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setDumpOnExit(final boolean dumpOnExit) { 156e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setDumpOnExit(dumpOnExit); 157e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 158e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 159e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 160e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets the output method. Default is <code>file</code> 161e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 162e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param output 163e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Output method 164e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 165e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setOutput(final String output) { 166e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setOutput(output); 167e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 168e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 169e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 170e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets the IP address or hostname to bind to when output method is tcp 171e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * server or connect to when the output method is tcp client. Default is 172e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * <code>localhost</code> 173e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 174e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param address 175e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Address to bind or connect to 176e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 177e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setAddress(final String address) { 178e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setAddress(address); 179e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 180e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 181e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 182e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets the Port to bind to when the output method is tcp server or connect 183e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * to when the output method is tcp client. Default is <code>6300</code> 184e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 185e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param port 18657f7cf06888f1e34f9ab2e3129c3d433826ecbe1Marc R. Hoffmann * port to bind to or connect to 187e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 188e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setPort(final int port) { 189e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setPort(port); 190e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 191e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 192e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 193e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Sets the directory where all class files seen by the agent should be 194e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * dumped to. 195e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 196e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @param dir 197e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * dump output location 198e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 199e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov public void setClassdumpdir(final File dir) { 200e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentOptions.setClassDumpDir(dir.getAbsolutePath()); 201e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 202e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 203e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov /** 204f2450ec546d7fd07bf75047f7a4181f9ccc5a585Marc R. Hoffmann * Sets whether the agent should expose functionality via JMX. 205e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann * 206e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann * @param jmx 207e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann * <code>true</code> if JMX should be enabled 208e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann */ 209e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann public void setJmx(final boolean jmx) { 210e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann agentOptions.setJmx(jmx); 211e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann } 212e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann 213e2930e70cc2d5409732639f0bda3af36b27e6db4Marc R. Hoffmann /** 214e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * Creates JVM argument to launch with the specified JaCoCo agent jar and 215e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * the current options 216e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * 217e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov * @return JVM Argument to pass to new VM 218e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov */ 219e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov protected String getLaunchingArgument() { 220d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann return prepareAgentOptions().getVMArgument(getAgentFile()); 221d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann } 222d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann 223d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann private AgentOptions prepareAgentOptions() { 224d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann if (OutputMode.file.equals(agentOptions.getOutput())) { 225d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann agentOptions.setDestfile(destfile.getAbsolutePath()); 226d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann } 227d5946166388e92f67220bbece1f104e21ab7b0cbMarc R. Hoffmann return agentOptions; 228e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 229e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 230e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov private File getAgentFile() { 231e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov try { 232e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov File agentFile = null; 233e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov final String agentFileLocation = getProject().getProperty( 234e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov "_jacoco.agentFile"); 235e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov if (agentFileLocation != null) { 236e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentFile = new File(agentFileLocation); 237e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } else { 238e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentFile = AgentJar.extractToTempLocation(); 239e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov getProject().setProperty("_jacoco.agentFile", 240e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov agentFile.toString()); 241e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 242e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 243e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov return agentFile; 244e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } catch (final IOException e) { 245e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov throw new BuildException("Unable to extract agent jar", e, 246e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov getLocation()); 247e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 248e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov } 249e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov 250e69ba4dbb015949c5d84ba7bbb0b53efac28bb23Evgeny Mandrikov} 251