From aeaadfb1ccc5e0bf6e4cf3c0b07db32667c4fb90 Mon Sep 17 00:00:00 2001 From: Geert Bevin Date: Sat, 4 Mar 2023 11:53:59 -0500 Subject: [PATCH] Added support for configurable precompiled template types --- app/build.gradle.kts | 2 + .../rife2/gradle/PrecompileTemplates.java | 37 ++++++++++--------- .../com/uwyn/rife2/gradle/Rife2Extension.java | 3 ++ .../com/uwyn/rife2/gradle/Rife2Plugin.java | 34 +++++++++-------- .../com/uwyn/rife2/gradle/TemplateType.java | 22 +++++++++++ 5 files changed, 66 insertions(+), 32 deletions(-) create mode 100644 build-logic/src/main/java/com/uwyn/rife2/gradle/TemplateType.java diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9729b16..de722df 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,5 +1,6 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent +import com.uwyn.rife2.gradle.TemplateType.* plugins { id("com.uwyn.rife2") @@ -29,6 +30,7 @@ rife2 { mainClass.set("hello.App") version.set("1.4.0") useAgent.set(true) + precompiledTemplateTypes.addAll(HTML) } dependencies { diff --git a/build-logic/src/main/java/com/uwyn/rife2/gradle/PrecompileTemplates.java b/build-logic/src/main/java/com/uwyn/rife2/gradle/PrecompileTemplates.java index 871df2e..8b9ab9a 100644 --- a/build-logic/src/main/java/com/uwyn/rife2/gradle/PrecompileTemplates.java +++ b/build-logic/src/main/java/com/uwyn/rife2/gradle/PrecompileTemplates.java @@ -18,6 +18,7 @@ package com.uwyn.rife2.gradle; import org.gradle.api.DefaultTask; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DirectoryProperty; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.Classpath; @@ -45,7 +46,7 @@ public abstract class PrecompileTemplates extends DefaultTask { public abstract DirectoryProperty getTemplatesDirectory(); @Input - public abstract Property getType(); + public abstract ListProperty getTypes(); @Input @Optional @@ -63,21 +64,23 @@ public abstract class PrecompileTemplates extends DefaultTask { @TaskAction public void precompileTemplates() { - getExecOperations().javaexec(javaexec -> { - javaexec.setClasspath(getClasspath()); - javaexec.getMainClass().set("rife.template.TemplateDeployer"); - List args = new ArrayList<>(); - if (getVerbose().isPresent() && Boolean.TRUE.equals(getVerbose().get())) { - args.add("-verbose"); - } - args.add("-t"); - args.add(getType().get()); - args.add("-d"); - args.add(getOutputDirectory().get().getAsFile().getPath()); - args.add("-encoding"); - args.add(getEncoding().orElse("UTF-8").get()); - args.add(getTemplatesDirectory().get().getAsFile().getPath()); - javaexec.args(args); - }); + for (var type : getTypes().get()) { + getExecOperations().javaexec(javaexec -> { + javaexec.setClasspath(getClasspath()); + javaexec.getMainClass().set("rife.template.TemplateDeployer"); + List args = new ArrayList<>(); + if (getVerbose().isPresent() && Boolean.TRUE.equals(getVerbose().get())) { + args.add("-verbose"); + } + args.add("-t"); + args.add(type.identifier()); + args.add("-d"); + args.add(getOutputDirectory().get().getAsFile().getPath()); + args.add("-encoding"); + args.add(getEncoding().orElse("UTF-8").get()); + args.add(getTemplatesDirectory().get().getAsFile().getPath()); + javaexec.args(args); + }); + } } } diff --git a/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Extension.java b/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Extension.java index ebd97e0..23a4ece 100644 --- a/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Extension.java +++ b/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Extension.java @@ -15,6 +15,7 @@ */ package com.uwyn.rife2.gradle; +import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; @SuppressWarnings("unused") @@ -26,4 +27,6 @@ public abstract class Rife2Extension { public abstract Property getUseAgent(); public abstract Property getUberMainClass(); + + public abstract ListProperty getPrecompiledTemplateTypes(); } diff --git a/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Plugin.java b/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Plugin.java index 6160749..9409eea 100644 --- a/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Plugin.java +++ b/build-logic/src/main/java/com/uwyn/rife2/gradle/Rife2Plugin.java @@ -20,7 +20,6 @@ import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.artifacts.dsl.DependencyHandler; import org.gradle.api.attributes.Attribute; -import org.gradle.api.attributes.AttributeContainer; import org.gradle.api.attributes.Bundling; import org.gradle.api.component.AdhocComponentWithVariants; import org.gradle.api.component.ConfigurationVariantDetails; @@ -53,17 +52,21 @@ public class Rife2Plugin implements Plugin { var configurations = project.getConfigurations(); var dependencyHandler = project.getDependencies(); var tasks = project.getTasks(); + var rife2Configuration = createRife2Configuration(configurations, dependencyHandler, rife2Extension); var rife2CompilerClasspath = createRife2CompilerClasspathConfiguration(configurations, rife2Configuration); var rife2AgentClasspath = createRife2AgentConfiguration(configurations, dependencyHandler, rife2Extension); configurations.getByName(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME).extendsFrom(rife2Configuration); - var precompileHtmlTemplates = registerPrecompileHtmlTemplateTask(project, rife2CompilerClasspath); - createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileHtmlTemplates); - exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileHtmlTemplates); + + var precompileTemplates = registerPrecompileTemplateTask(project, rife2CompilerClasspath, rife2Extension); + createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileTemplates); + exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates); configureAgent(project, plugins, rife2Extension, rife2AgentClasspath); registerRunTask(project, rife2Extension, rife2AgentClasspath); - var uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileHtmlTemplates); - bundlePrecompiledTemplatesIntoJarFile(tasks, precompileHtmlTemplates); + var uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates); + + bundlePrecompiledTemplatesIntoJarFile(tasks, precompileTemplates); + configureMavenPublishing(project, plugins, configurations, uberJarTask); } @@ -103,15 +106,15 @@ public class Rife2Plugin implements Plugin { private static void exposePrecompiledTemplatesToTestTask(Project project, ConfigurationContainer configurations, DependencyHandler dependencyHandler, - TaskProvider precompileTemplates) { + TaskProvider precompileTemplatesTask) { configurations.getByName(JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME) .getDependencies() - .add(dependencyHandler.create(project.files(precompileTemplates))); + .add(dependencyHandler.create(project.files(precompileTemplatesTask))); } private static void bundlePrecompiledTemplatesIntoJarFile(TaskContainer tasks, - TaskProvider precompileTemplates) { - tasks.named("jar", Jar.class, jar -> jar.from(precompileTemplates)); + TaskProvider precompileTemplatesTask) { + tasks.named("jar", Jar.class, jar -> jar.from(precompileTemplatesTask)); } private void createRife2DevelopmentOnlyConfiguration(Project project, @@ -210,14 +213,15 @@ public class Rife2Plugin implements Plugin { return config; } - private static TaskProvider registerPrecompileHtmlTemplateTask(Project project, - Configuration rife2CompilerClasspath) { - return project.getTasks().register("precompileHtmlTemplates", PrecompileTemplates.class, task -> { + private static TaskProvider registerPrecompileTemplateTask(Project project, + Configuration rife2CompilerClasspath, + Rife2Extension rife2Extension) { + return project.getTasks().register("precompileTemplates", PrecompileTemplates.class, task -> { task.setGroup(RIFE2_GROUP); - task.setDescription("Pre-compiles the HTML templates."); + task.setDescription("Pre-compiles the templates."); task.getVerbose().convention(true); task.getClasspath().from(rife2CompilerClasspath); - task.getType().convention("html"); + task.getTypes().convention(rife2Extension.getPrecompiledTemplateTypes()); task.getTemplatesDirectory().set(project.getLayout().getProjectDirectory().dir(DEFAULT_TEMPLATES_DIR)); task.getOutputDirectory().set(project.getLayout().getBuildDirectory().dir(DEFAULT_GENERATED_RIFE2_CLASSES_DIR)); }); diff --git a/build-logic/src/main/java/com/uwyn/rife2/gradle/TemplateType.java b/build-logic/src/main/java/com/uwyn/rife2/gradle/TemplateType.java new file mode 100644 index 0000000..0e2a30b --- /dev/null +++ b/build-logic/src/main/java/com/uwyn/rife2/gradle/TemplateType.java @@ -0,0 +1,22 @@ +package com.uwyn.rife2.gradle; + +import java.io.Serializable; + +public class TemplateType implements Serializable { + public static TemplateType HTML = new TemplateType("html"); + public static TemplateType JSON = new TemplateType("json"); + public static TemplateType SVG = new TemplateType("svg"); + public static TemplateType XML = new TemplateType("xml"); + public static TemplateType TXT = new TemplateType("txt"); + public static TemplateType SQL = new TemplateType("sql"); + + private final String identifier_; + + public TemplateType(String identifier) { + identifier_ = identifier; + } + + public String identifier() { + return identifier_; + } +} \ No newline at end of file