PrepareRendererOutputMojo.java
package network.ike.docs.plugin;
import org.apache.maven.api.plugin.MojoException;
import org.apache.maven.api.plugin.annotations.Mojo;
import org.apache.maven.api.plugin.annotations.Parameter;
import java.io.File;
/**
* Create output directories for external PDF renderers.
*
* <p>Replaces the per-renderer {@code mkdir -p} exec-maven-plugin calls
* with a single cross-platform Java goal. Creates directories only for
* renderers that are not skipped.
*
* <p>Usage:
* <pre>{@code
* <execution>
* <id>prepare-renderer-output</id>
* <phase>prepare-package</phase>
* <goals><goal>prepare-renderer-output</goal></goals>
* </execution>
* }</pre>
*/
@Mojo(name = "prepare-renderer-output",
defaultPhase = "prepare-package")
public class PrepareRendererOutputMojo implements org.apache.maven.api.plugin.Mojo {
@org.apache.maven.api.di.Inject
private org.apache.maven.api.plugin.Log log;
/**
* Access the Maven logger.
*
* @return the logger
*/
protected org.apache.maven.api.plugin.Log getLog() { return log; }
/** Root output directory (e.g., target/ike-doc). */
@Parameter(property = "ike.doc.output.directory",
defaultValue = "${project.build.directory}/ike-doc",
required = true)
File outputDirectory;
/** Skip Prince output directory. */
@Parameter(property = "ike.skip.prince", defaultValue = "false")
boolean skipPrince;
/** Skip Antenna House output directory. */
@Parameter(property = "ike.skip.ah", defaultValue = "true")
boolean skipAh;
/** Skip WeasyPrint output directory. */
@Parameter(property = "ike.skip.weasyprint", defaultValue = "true")
boolean skipWeasyprint;
/** Skip XEP output directory. */
@Parameter(property = "ike.skip.xep", defaultValue = "true")
boolean skipXep;
/** Skip FOP output directory. */
@Parameter(property = "ike.skip.fop", defaultValue = "true")
boolean skipFop;
/** Skip default PDF output directory. */
@Parameter(property = "ike.skip.pdf-default", defaultValue = "false")
boolean skipPdfDefault;
/** Creates this goal instance. */
public PrepareRendererOutputMojo() {}
@Override
public void execute() throws MojoException {
int created = 0;
created += mkdirIf(!skipPrince, "pdf-prince");
created += mkdirIf(!skipAh, "pdf-ah");
created += mkdirIf(!skipWeasyprint, "pdf-weasyprint");
created += mkdirIf(!skipXep, "pdf-xep");
created += mkdirIf(!skipFop, "pdf-fop");
created += mkdirIf(!skipPdfDefault, "pdf");
if (created > 0) {
getLog().info("prepare-renderer-output: created " + created
+ " directories under " + outputDirectory);
} else {
getLog().debug("prepare-renderer-output: no directories needed");
}
}
private int mkdirIf(boolean enabled, String subdir) {
if (!enabled) return 0;
File dir = new File(outputDirectory, subdir);
if (!dir.exists()) {
dir.mkdirs();
return 1;
}
return 0;
}
}