All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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