116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov/******************************************************************************* 2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors 316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * All rights reserved. This program and the accompanying materials 416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0 516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * which accompanies this distribution, and is available at 616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html 716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * 816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Contributors: 916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Evgeny Mandrikov - initial API and implementation 1016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * 1116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov *******************************************************************************/ 1216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovpackage org.jacoco.maven; 1316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 146fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikovimport java.util.List; 156fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov 1616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovimport org.apache.maven.plugin.AbstractMojo; 17253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieberimport org.apache.maven.plugin.MojoExecutionException; 18253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieberimport org.apache.maven.plugin.MojoFailureException; 19ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikovimport org.apache.maven.plugins.annotations.Parameter; 2016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovimport org.apache.maven.project.MavenProject; 2116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 2216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov/** 2316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Base class for JaCoCo Mojos. 2416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */ 2516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovpublic abstract class AbstractJacocoMojo extends AbstractMojo { 2616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 2716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov /** 2816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Maven project. 2916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */ 30ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov @Parameter(property = "project", readonly = true) 3116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov private MavenProject project; 3216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 3316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov /** 346fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov * A list of class files to include in instrumentation/analysis/reports. May 3584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * use wildcard characters (* and ?). When not specified everything will be 3684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * included. 376fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov */ 38ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov @Parameter 396fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov private List<String> includes; 406fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov 416fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov /** 426fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov * A list of class files to exclude from instrumentation/analysis/reports. 4384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * May use wildcard characters (* and ?). When not specified nothing will be 4484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * excluded. 456fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov */ 46ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov @Parameter 476fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov private List<String> excludes; 486fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov 496fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov /** 5016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Flag used to suppress execution. 5116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */ 52ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov @Parameter(property = "jacoco.skip", defaultValue = "false") 5316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov private boolean skip; 5416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 55253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber public final void execute() throws MojoExecutionException, 56253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber MojoFailureException { 5716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov if (skip) { 5840605f98c6ea94ba045f20ef450050a771d7d6b9Mirko Friedenhagen getLog().info( 5940605f98c6ea94ba045f20ef450050a771d7d6b9Mirko Friedenhagen "Skipping JaCoCo execution because property jacoco.skip is set."); 60ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov skipMojo(); 6116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov return; 6216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov } 6316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov executeMojo(); 6416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov } 6516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 6616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov /** 6716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Executes Mojo. 68253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * 69253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * @throws MojoExecutionException 70253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * if an unexpected problem occurs. Throwing this exception 71253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * causes a "BUILD ERROR" message to be displayed. 72253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * @throws MojoFailureException 73253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * if an expected problem (such as a compilation failure) 74253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * occurs. Throwing this exception causes a "BUILD FAILURE" 75253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber * message to be displayed. 7616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */ 77253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber protected abstract void executeMojo() throws MojoExecutionException, 78253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber MojoFailureException; 7916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 8016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov /** 81ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov * Skips Mojo. 82ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov */ 83ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov protected void skipMojo() { 84ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov } 85ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov 86ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov /** 8716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * @return Maven project 8816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */ 8916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov protected final MavenProject getProject() { 9016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov return project; 9116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov } 9216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov 9384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann /** 9484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * Returns the list of class files to include. 9584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * 9684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * @return class files to include, may contain wildcard characters 9784cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann */ 986fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov protected List<String> getIncludes() { 996fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov return includes; 1006fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov } 1016fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov 10284cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann /** 10384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * Returns the list of class files to exclude. 10484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * 10584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann * @return class files to exclude, may contain wildcard characters 10684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann */ 1076fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov protected List<String> getExcludes() { 1086fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov return excludes; 1096fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov } 11084cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann 11116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov} 112