
cn.dreampie.MinifierMojo Maven / Gradle / Ivy
The newest version!
package cn.dreampie;
import com.google.common.collect.Lists;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import java.io.File;
import java.util.List;
/**
* Copyright 2011 Mark Derricutt.
*
* Contributing authors:
* Daniel Bower
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Minify JavaScript with Maven
*/
@Mojo(name = "minify", defaultPhase = LifecyclePhase.PROCESS_CLASSES, requiresDependencyResolution = ResolutionScope.COMPILE)
public class MinifierMojo extends AbstractMojo {
/**
* Location of the Files to Minify. Defaults to ${build.directory}/coffee
*/
@Parameter(defaultValue = "${project.basedir}/src/main/javascript")
private File sourceDirectory;
/**
* The set of files that should be minified. Be sure to specify the path to the compiled
*
* Only one or the other of files or directoryOfFilesToMinify should be specified. Only files is used if both are specified.
*/
@Parameter
private File[] includeFiles;
@Parameter
private File[] excludeFiles;
@Parameter(defaultValue = "${project.basedir}/src/main/webapp/javascript/${project.artifactId}-${project.version}.min.js")
private File outputFile;
@Parameter(defaultValue = "${project.basedir}/src/main/webapp/javascript")
private File outputDirectory;
@Parameter(defaultValue = "false")
private boolean merge;
@Parameter(defaultValue = "false")
private boolean skip;
public void execute() throws MojoExecutionException, MojoFailureException {
LogKit.setLog(getLog());
try {
getLog().info("Minifying all Javascript Files in the Output Directory");
ClosureMinifier minifier = new ClosureMinifier();
minifier.setSourceDirectory(sourceDirectory);
List filesToMinify;
if (null != includeFiles) {
filesToMinify = Lists.newArrayList(includeFiles);
getLog().info("About to include the following files: " + FileUtilities
.getCommaSeparatedListOfFileNames(filesToMinify));
} else {
getLog().debug("No file to include,use sourceDirectory.");
filesToMinify = FileUtilities.directoryToFileList(sourceDirectory);
}
List filesToMinifyMinusDestFile = null;
if (null != excludeFiles) {
filesToMinifyMinusDestFile = getMinifyFiles(filesToMinify, Lists.newArrayList(excludeFiles));
} else {
filesToMinifyMinusDestFile = filesToMinify;
}
if (filesToMinifyMinusDestFile != null && filesToMinifyMinusDestFile.size() > 0) {
getLog().info("About to minify the following files: " + FileUtilities
.getCommaSeparatedListOfFileNames(filesToMinifyMinusDestFile));
} else {
getLog().info("No file to minify.");
}
if (merge) {
minifier.compile(filesToMinifyMinusDestFile, outputFile);
} else {
minifier.setOutputDirectory(outputDirectory);
minifier.compile(filesToMinifyMinusDestFile);
}
} catch (Exception e) {
throw new MojoExecutionException(e.getMessage(), e);
}
}
private List getMinifyFiles(List filesToMinify, List outFiles) {
if (outFiles != null && outFiles.size() > 0) {
getLog().info("About to exclude the following files: " + FileUtilities
.getCommaSeparatedListOfFileNames(outFiles));
List filesToMinifyMinusDestFile = Lists.newArrayList();
for (File file : filesToMinify) {
if (file.isDirectory()) {
filesToMinifyMinusDestFile.addAll(FileUtilities.directoryToFileList(file));
} else {
filesToMinifyMinusDestFile.add(file);
}
}
for (File outFile : outFiles) {
if (outFile.isDirectory()) {
if (outFile.isDirectory()) {
filesToMinifyMinusDestFile.removeAll(FileUtilities.directoryToFileList(outFile));
} else {
filesToMinifyMinusDestFile.remove(outFile);
}
}
}
return filesToMinifyMinusDestFile;
} else {
getLog().info("No file to exclude.");
return filesToMinify;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy