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

gg.jte.maven.GeneratorMojo Maven / Gradle / Ivy

package gg.jte.maven;

import gg.jte.ContentType;
import gg.jte.TemplateEngine;
import gg.jte.resolve.DirectoryCodeResolver;
import gg.jte.runtime.Constants;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import static org.apache.maven.plugins.annotations.LifecyclePhase.GENERATE_SOURCES;

@Mojo(name = "generate", defaultPhase = GENERATE_SOURCES, threadSafe = true)
public class GeneratorMojo extends AbstractMojo {

    @Parameter(defaultValue = "${project}")
    public MavenProject project;

    /**
     * The directory where template files are located.
     */
    @Parameter(required = true)
    public String sourceDirectory;

    /**
     * Destination directory to store generated templates. Defaults to 'target/generated-sources/jte'.
     */
    @Parameter(defaultValue = "${project.build.directory}/generated-sources/jte")
    public String targetDirectory;

    /**
     * The content type of all templates. Either Plain or Html.
     */
    @Parameter(required = true)
    public String contentType;

    /**
     * Trims control structures, resulting in prettier output.
     */
    @Parameter
    public boolean trimControlStructures;

    /**
     * Intercepts the given html tags during template compilation
     * and calls the configured htmlInterceptor during template rendering.
     */
    @Parameter
    public String[] htmlTags;

    /**
     * By default, jte omits all HTML/CSS/JS comments, when compiling with {@link ContentType#Html}.
     * If you don't want this behavior, you can disable it here.
     */
    @Parameter
    public boolean htmlCommentsPreserved;

    /**
     * Setting, that UTF-8 encodes all static template parts at compile time.
     * Only makes sense if you use a binary output, like {@link gg.jte.output.Utf8ByteOutput}.
     */
    @Parameter
    public boolean binaryStaticContent;

    /**
     * The package name, where template classes are generated to.
     */
    @Parameter
    public String packageName = Constants.PACKAGE_NAME_PRECOMPILED;

    /**
     * Directory in which to generate non-java files (resources). Typically, set by plugin rather than end user.
     * Optional - if null, resources will not be generated
     */
    @Parameter
    public String targetResourceDirectory;

    /**
     * Optional - Extensions this template engine should load. Currently, the following extensions exist:
     *
     * 
    *
  • gg.jte.models.generator.ModelExtension
  • *
  • gg.jte.nativeimage.NativeResourcesExtension
  • *
*/ @Parameter public List extensions; @Override public void execute() { long start = System.nanoTime(); Path source = Paths.get(sourceDirectory); Path target = Paths.get(targetDirectory); getLog().info("Generating jte templates found in " + source); TemplateEngine templateEngine = TemplateEngine.create(new DirectoryCodeResolver(source), target, ContentType.valueOf(contentType), null, packageName); templateEngine.setTrimControlStructures(trimControlStructures); templateEngine.setHtmlTags(htmlTags); templateEngine.setHtmlCommentsPreserved(htmlCommentsPreserved); templateEngine.setBinaryStaticContent(binaryStaticContent); if (targetResourceDirectory != null) { templateEngine.setTargetResourceDirectory(Paths.get(targetResourceDirectory)); } templateEngine.setProjectNamespace(project.getGroupId() + "/" + project.getArtifactId()); if (extensions != null) { templateEngine.setExtensions( extensions.stream() .collect(Collectors.toMap(ExtensionSettings::getClassName, ExtensionSettings::getSettings)) ); getLog().info("Using extensions = " + extensions); } int amount; try { templateEngine.cleanAll(); amount = templateEngine.generateAll().size(); } catch (Exception e) { getLog().error("Failed to generate templates."); getLog().error(e); throw e; } long end = System.nanoTime(); long duration = TimeUnit.NANOSECONDS.toSeconds(end - start); getLog().info("Successfully generated " + amount + " jte file" + (amount == 1 ? "" : "s") + " in " + duration + "s to " + target); project.addCompileSourceRoot(targetDirectory); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy