li.rudin.mavenjs.plugin.OptimizeMojo Maven / Gradle / Ivy
package li.rudin.mavenjs.plugin;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import li.rudin.mavenjs.plugin.optimize.CSSRequireJSConfig;
import li.rudin.mavenjs.plugin.optimize.RequireJSConfig;
import li.rudin.mavenjs.plugin.util.DirCopyVisitor;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
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;
/**
* - unpacks all deps to the mavenjs dir
* - copies resources from target/classes to the mavenjs build dir
* - optimizes files in mavenjs dir
* - copies them to target/classes
* @author user
*
*/
@Mojo(requiresDependencyResolution=ResolutionScope.TEST, defaultPhase=LifecyclePhase.PREPARE_PACKAGE, name="optimize")
public class OptimizeMojo extends AbstractMavenjsMojo
{
/**
* Name of the javascript-file
* defaults to main
*/
@Parameter String[] scriptFiles;
/**
* Name of the css-file
* defaults to style
*/
@Parameter String[] cssFiles;
@Parameter(defaultValue="${project.build.directory}/mavenjs_optimize_js.js") String jsConfigFile;
@Parameter(defaultValue="${project.build.directory}/mavenjs_optimize_css.js") String cssConfigFile;
/**
* compiled webapp gets copied here
*/
@Parameter(defaultValue="${project.build.directory}/classes") String webappOutput;
@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
//https://github.com/TimMoore/mojo-executor
Log logger = getLog();
//Copy dependencies to target folder
unpackDependencies();
try
{
//Copy main resources
if (new File(project.getBuild().getOutputDirectory()).exists())
Files.walkFileTree(Paths.get(project.getBuild().getOutputDirectory()), new DirCopyVisitor(Paths.get(mavenjsBuildDir), logger));
if (scriptFiles != null)
for (String scriptFile: scriptFiles)
{
logger.info("Optimizing script: " + scriptFile);
//Optimize javascript
RequireJSConfig jsOptimizerConfig = new RequireJSConfig();
jsOptimizerConfig.setOut(mavenjsBuildDir + "/js/"+scriptFile+".js");
jsOptimizerConfig.setBaseUrl(mavenjsBuildDir + "/js");
jsOptimizerConfig.getInclude().add(scriptFile);
if (new File(mavenjsBuildDir + "/js/lib.js").exists())
jsOptimizerConfig.setMainConfigFile(mavenjsBuildDir + "/js/lib.js");
mapper.writeValue(new File(jsConfigFile), jsOptimizerConfig);
optimize(jsConfigFile);
//Create directories
new File(webappOutput + "/js").mkdirs();
//Overwrite with optimized files
Files.copy(
Paths.get(jsOptimizerConfig.getOut()),
Paths.get(webappOutput + "/js/" + scriptFile + ".js"),
StandardCopyOption.REPLACE_EXISTING
);
}
if (cssFiles != null)
for (String cssFile: cssFiles)
{
logger.info("Optimizing stylesheet: " + cssFile);
if (new File(mavenjsBuildDir + "/css/style.css").exists())
{
//Optimize css
CSSRequireJSConfig cssOptimizerConfig = new CSSRequireJSConfig();
cssOptimizerConfig.setOut(mavenjsBuildDir + "/css/"+cssFile+".css");
cssOptimizerConfig.setCssIn(mavenjsBuildDir + "/css/"+cssFile+".css");
mapper.writeValue(new File(cssConfigFile), cssOptimizerConfig);
optimize(cssConfigFile);
//Create subdirs
new File(webappOutput + "/css").mkdirs();
//Overwrite with optimized files
Files.copy(
Paths.get(cssOptimizerConfig.getOut()),
Paths.get(webappOutput + "/css/" + cssFile + ".css"),
StandardCopyOption.REPLACE_EXISTING
);
}
}
}
catch (IOException e)
{
logger.error(e);
throw new MojoFailureException("optimize", e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy