1 /* 2 * #%L 3 * Mojo's Maven plugin for Cobertura 4 * %% 5 * Copyright (C) 2005 - 2013 Codehaus 6 * %% 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * #L% 19 */ 20 package org.codehaus.mojo.cobertura; 21 22 /* 23 * Copyright 2011 24 * 25 * Licensed under the Apache License, Version 2.0 (the "License"); 26 * you may not use this file except in compliance with the License. 27 * You may obtain a copy of the License at 28 * 29 * http://www.apache.org/licenses/LICENSE-2.0 30 * 31 * Unless required by applicable law or agreed to in writing, software 32 * distributed under the License is distributed on an "AS IS" BASIS, 33 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 34 * See the License for the specific language governing permissions and 35 * limitations under the License. 36 */ 37 38 import org.apache.maven.artifact.Artifact; 39 import org.apache.maven.plugin.AbstractMojo; 40 import org.apache.maven.plugin.MojoExecution; 41 import org.apache.maven.project.MavenProject; 42 import org.codehaus.mojo.cobertura.configuration.MaxHeapSizeUtil; 43 import org.codehaus.mojo.cobertura.tasks.AbstractTask; 44 45 import java.io.File; 46 import java.util.List; 47 48 /** 49 * Abstract Base for Cobertura Mojos. 50 * 51 * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a> 52 */ 53 public abstract class AbstractCoberturaMojo 54 extends AbstractMojo 55 { 56 /** 57 * <i>Maven Internal</i>: Project to interact with. 58 * 59 * @parameter default-value="${project}" 60 * @required 61 * @readonly 62 */ 63 private MavenProject project; 64 65 /** 66 * Maximum memory to pass to the JVM for Cobertura processes. 67 * 68 * @parameter expression="${cobertura.maxmem}" default-value="64m" 69 */ 70 // Duplicate def to please MojoTestCase. 71 // Use only default-value once tests have been refactored to IT's 72 private String maxmem = "64m"; 73 74 /** 75 * <p> 76 * The Datafile Location. 77 * </p> 78 * 79 * @parameter expression="${cobertura.datafile}" default-value="${project.build.directory}/cobertura/cobertura.ser" 80 * @required 81 * @readonly 82 */ 83 private File dataFile; 84 85 /** 86 * @parameter default-value="${mojoExecution}" 87 * @required 88 * @readonly 89 */ 90 private MojoExecution mojoExecution; 91 92 /** 93 * Only output Cobertura errors, avoid info messages. 94 * 95 * @parameter expression="${quiet}" default-value="false" 96 */ 97 private boolean quiet; 98 99 /** 100 * <i>Maven Internal</i>: List of artifacts for the plugin. 101 * 102 * @parameter default-value="${plugin.artifacts}" 103 * @required 104 * @readonly 105 */ 106 protected List<Artifact> pluginClasspathList; 107 108 /** 109 * When <code>true</code>, skip the execution. 110 * 111 * @parameter expression="${cobertura.skip}" 112 * default-value="false" 113 * @since 2.5 114 */ 115 private boolean skip; 116 117 /** 118 * Usually most of our Cobertura mojos will not get executed on parent poms. 119 * Setting this parameter to <code>true</code> will force 120 * the execution of this mojo, even if it would usually get skipped in this case. 121 * 122 * @parameter expression="${cobertura.force}" 123 * default-value=false 124 * @required 125 * @since 2.5 126 */ 127 private boolean forceMojoExecution; 128 129 130 /** 131 * Setup the Task defaults. 132 * 133 * @param task the task to setup. 134 */ 135 protected void setTaskDefaults( AbstractTask task ) 136 { 137 task.setLog( getLog() ); 138 task.setPluginClasspathList( pluginClasspathList ); 139 140 if ( MaxHeapSizeUtil.getInstance().envHasMavenMaxMemSetting() ) 141 { 142 maxmem = MaxHeapSizeUtil.getInstance().getMavenMaxMemSetting(); 143 } 144 else 145 { 146 task.setMaxmem( maxmem ); 147 } 148 task.setQuiet( quiet ); 149 } 150 151 /** 152 * <p>Determine if the mojo execution should get skipped.</p> 153 * This is the case if: 154 * <ul> 155 * <li>{@link #skip} is <code>true</code></li> 156 * <li>if the mojo gets executed on a project with packaging type 'pom' and 157 * {@link #forceMojoExecution} is <code>false</code></li> 158 * </ul> 159 * 160 * @return <code>true</code> if the mojo execution should be skipped. 161 */ 162 protected boolean skipMojo() 163 { 164 if ( skip ) 165 { 166 getLog().info( "Skipping cobertura execution" ); 167 return true; 168 } 169 170 if ( !forceMojoExecution && "pom".equals( this.project.getPackaging() ) ) 171 { 172 getLog().info( "Skipping cobertura mojo for project with packaging type 'pom'" ); 173 return true; 174 } 175 176 return false; 177 } 178 179 /** 180 * Get the data file which is or will be generated by Cobertura, never <code>null</code>. 181 * 182 * @return the data file 183 */ 184 protected File getDataFile() 185 { 186 return CoberturaMojoUtils.getDataFile( new File( this.project.getBuild().getDirectory() ), mojoExecution ); 187 } 188 189 /** 190 * @return the project 191 */ 192 protected final MavenProject getProject() 193 { 194 return project; 195 } 196 197 }