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