001 package org.kuali.maven.mojo; 002 003 import org.apache.maven.execution.MavenSession; 004 import org.apache.maven.plugin.AbstractMojo; 005 import org.apache.maven.plugin.MojoExecutionException; 006 import org.apache.maven.plugin.MojoFailureException; 007 import org.apache.maven.project.MavenProject; 008 import org.apache.maven.settings.Settings; 009 010 /** 011 * Mojo essentials. Contains the "skip" logic that is the de facto standard for maven plugins. Contains a number of 012 * maven related properties that are common to most mojos. 013 */ 014 public abstract class BaseMojo extends AbstractMojo { 015 public static final String FS = System.getProperty("file.separator"); 016 public static final String SKIP_PACKAGING_TYPE = "pom"; 017 018 /** 019 * When <code>true</code>, skip the execution of this mojo 020 * 021 * @parameter default-value="false" 022 */ 023 private boolean skip; 024 025 /** 026 * Setting this parameter to <code>true</code> will force the execution of this mojo, even if it would get skipped 027 * usually. 028 * 029 * @parameter expression="${forceMojoExecution}" default-value="false" 030 * @required 031 */ 032 private boolean forceMojoExecution; 033 034 /** 035 * The encoding to use when reading/writing files. If not specified this defaults to the platform specific encoding 036 * of whatever machine the build is running on. 037 * 038 * @parameter expression="${encoding}" default-value="${project.build.sourceEncoding}" 039 */ 040 private String encoding; 041 042 /** 043 * The Maven project this plugin runs in. 044 * 045 * @parameter expression="${project}" 046 * @required 047 * @readonly 048 */ 049 private MavenProject project; 050 051 /** 052 * @parameter expression="${settings}" 053 * @required 054 * @since 1.0 055 * @readonly 056 */ 057 private Settings settings; 058 059 /** 060 * @parameter default-value="${session}" 061 * @required 062 * @readonly 063 */ 064 private MavenSession mavenSession; 065 066 protected void beforeExecution() throws MojoExecutionException, MojoFailureException { 067 } 068 069 protected void afterExecution() throws MojoExecutionException, MojoFailureException { 070 } 071 072 @Override 073 public void execute() throws MojoExecutionException, MojoFailureException { 074 beforeExecution(); 075 if (skipMojo()) { 076 return; 077 } 078 executeMojo(); 079 afterExecution(); 080 } 081 082 protected abstract void executeMojo() throws MojoExecutionException, MojoFailureException; 083 084 /** 085 * <p> 086 * Determine if the mojo execution should get skipped. 087 * </p> 088 * This is the case if: 089 * <ul> 090 * <li>{@link #skip} is <code>true</code></li> 091 * <li>if the mojo gets executed on a project with packaging type 'pom' and {@link #forceMojoExecution} is 092 * <code>false</code></li> 093 * </ul> 094 * 095 * @return <code>true</code> if the mojo execution should be skipped. 096 */ 097 protected boolean skipMojo() { 098 if (skip) { 099 getLog().info("Skipping execution"); 100 return true; 101 } 102 103 if (!forceMojoExecution && project != null && SKIP_PACKAGING_TYPE.equals(project.getPackaging())) { 104 getLog().info("Skipping execution for project with packaging type '" + SKIP_PACKAGING_TYPE + "'"); 105 return true; 106 } 107 108 return false; 109 } 110 111 /** 112 * Returns the maven project. 113 * 114 * @return The maven project where this plugin runs in. 115 */ 116 public MavenProject getProject() { 117 return project; 118 } 119 120 public String getEncoding() { 121 return encoding; 122 } 123 124 public void setEncoding(final String encoding) { 125 this.encoding = encoding; 126 } 127 128 public boolean isSkip() { 129 return skip; 130 } 131 132 public void setSkip(final boolean skip) { 133 this.skip = skip; 134 } 135 136 public boolean isForceMojoExecution() { 137 return forceMojoExecution; 138 } 139 140 public void setForceMojoExecution(final boolean forceMojoExecution) { 141 this.forceMojoExecution = forceMojoExecution; 142 } 143 144 public Settings getSettings() { 145 return settings; 146 } 147 148 public void setSettings(final Settings settings) { 149 this.settings = settings; 150 } 151 152 public MavenSession getMavenSession() { 153 return mavenSession; 154 } 155 156 public void setMavenSession(final MavenSession mavenSession) { 157 this.mavenSession = mavenSession; 158 } 159 160 public void setProject(final MavenProject project) { 161 this.project = project; 162 } 163 }