net.sf.alchim.mojo.yuicompressor.MojoSupport Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of yuicompressor-maven-plugin Show documentation
Show all versions of yuicompressor-maven-plugin Show documentation
To compress (Minify + Ofuscate) Javascript files and CSS files (using YUI Compressor from Julien Lecomte) and/or
to check Javascript files with jslint.
package net.sf.alchim.mojo.yuicompressor;
import java.io.File;
import java.util.List;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.DirectoryScanner;
/**
* Common class for mojos.
*
* @author David Bernard
* @created 2007-08-29
*/
// @SuppressWarnings("unchecked")
public abstract class MojoSupport extends AbstractMojo {
private static final String[] EMPTY_STRING_ARRAY = {};
/**
* Single directory for extra files to include in the WAR.
*
* @parameter expression="${basedir}/src/main/webapp"
*/
private File warSourceDirectory;
/**
* The directory where the webapp is built.
*
* @parameter expression="${project.build.directory}/${project.build.finalName}"
*/
private File webappDirectory;
/**
* The output directory into which to copy the resources.
*
* @parameter expression="${project.build.outputDirectory}"
*/
private File outputDirectory;
/**
* The list of resources we want to transfer.
*
* @parameter expression="${project.resources}"
*/
private List resources;
/**
* list of additionnal excludes
*
* @parameter
*/
private List excludes;
/**
* @parameter expression="${project}"
* @required
*/
protected MavenProject project;
/**
* [js only] Display possible errors in the code
*
* @parameter expression="${maven.yuicompressor.jswarm}" default-value="true"
*/
protected boolean jswarn;
/**
* define if plugin must stop/fail on warnings.
*
* @parameter expression="${maven.yuicompressor.failOnWarning}" default-value="false"
*/
protected boolean failOnWarning;
protected ErrorReporter4Mojo jsErrorReporter_;
@SuppressWarnings("unchecked")
public void execute() throws MojoExecutionException, MojoFailureException {
try {
if (failOnWarning) {
jswarn = true;
}
jsErrorReporter_ = new ErrorReporter4Mojo(getLog(), jswarn);
beforeProcess();
for (Resource resource : resources){
processDir(new File( resource.getDirectory() ), outputDirectory, resource.getIncludes(), resource.getExcludes());
}
processDir(warSourceDirectory, webappDirectory, null, null);
afterProcess();
getLog().info(String.format("nb warnings: %d, nb errors: %d", jsErrorReporter_.getWarningCnt(), jsErrorReporter_.getErrorCnt()));
if (failOnWarning && (jsErrorReporter_.getWarningCnt() > 0)) {
throw new MojoFailureException("warnings on "+ this.getClass().getSimpleName() + "=> failure ! (see log)");
}
} catch (RuntimeException exc) {
throw exc;
} catch (MojoFailureException exc) {
throw exc;
} catch (MojoExecutionException exc) {
throw exc;
} catch (Exception exc) {
throw new MojoExecutionException("wrap: " + exc.getMessage(), exc);
}
}
protected abstract String[] getDefaultIncludes() throws Exception;
protected abstract void beforeProcess() throws Exception;
protected abstract void afterProcess() throws Exception;
protected void processDir(File srcRoot, File destRoot, List srcIncludes, List srcExcludes) throws Exception {
if ((srcRoot == null) || ( !srcRoot.exists() )) {
return;
}
if (destRoot == null) {
throw new MojoFailureException("destination directory for " + srcRoot + " is null");
}
DirectoryScanner scanner = new DirectoryScanner();
scanner.setBasedir(srcRoot);
if ( (srcIncludes != null) && !srcIncludes.isEmpty() ) {
scanner.setIncludes( srcIncludes.toArray( EMPTY_STRING_ARRAY ) );
} else {
scanner.setIncludes(getDefaultIncludes());
}
if ( (srcExcludes != null) && !srcExcludes.isEmpty() ) {
scanner.setExcludes( srcExcludes.toArray( EMPTY_STRING_ARRAY ) );
}
if ((excludes != null) && !excludes.isEmpty()) {
scanner.setExcludes( excludes.toArray( EMPTY_STRING_ARRAY ) );
}
scanner.addDefaultExcludes();
scanner.scan();
for(String name :scanner.getIncludedFiles() ) {
SourceFile src = new SourceFile(srcRoot, name);
jsErrorReporter_.setDefaultFileName("..." + src.toFile().getAbsolutePath().substring(project.getBasedir().getAbsolutePath().length()));
processFile(src, destRoot);
}
}
protected abstract void processFile(SourceFile src, File destRoot) throws Exception;
}