From d06124c26d14b9d86be392a818c4b3dd9b680ace Mon Sep 17 00:00:00 2001 From: Cedric Champeau Date: Sun, 5 Mar 2023 16:33:36 +0100 Subject: [PATCH] Make the template directories configurable Adding a directory can be done via the extension: ```gradle rife2 { templateDirectories.from(file("my-template-dir")) } ``` By default the template directories include both `src/main/templates` and `src/main/resources/templates`. If you want to ignore those, then you need to clear the default: ```gradle rife2 { templateDirectories.from.clear() templateDirectories.from(file("my-template-dir")) } ``` --- .../java/com/uwyn/rife2/gradle/Rife2Extension.java | 3 +++ .../java/com/uwyn/rife2/gradle/Rife2Plugin.java | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) 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 30fa218..c4c641c 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.file.ConfigurableFileCollection; import org.gradle.api.provider.ListProperty; import org.gradle.api.provider.Property; @@ -26,4 +27,6 @@ public abstract class Rife2Extension { public abstract Property getUberMainClass(); public abstract ListProperty getPrecompiledTemplateTypes(); + + public abstract ConfigurableFileCollection getTemplateDirectories(); } 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 cff2328..aa527b2 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 @@ -24,6 +24,7 @@ import org.gradle.api.attributes.Attribute; import org.gradle.api.attributes.Bundling; import org.gradle.api.component.AdhocComponentWithVariants; import org.gradle.api.component.ConfigurationVariantDetails; +import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.DuplicatesStrategy; import org.gradle.api.plugins.BasePluginExtension; import org.gradle.api.plugins.JavaApplication; @@ -41,6 +42,7 @@ import org.gradle.process.CommandLineArgumentProvider; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; public class Rife2Plugin implements Plugin { public static final List DEFAULT_TEMPLATES_DIRS = List.of("src/main/resources/templates", "src/main/templates"); @@ -65,7 +67,7 @@ public class Rife2Plugin implements Plugin { configurations.getByName(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME).extendsFrom(rife2Configuration); var precompileTemplates = registerPrecompileTemplateTask(project, rife2CompilerClasspath, rife2Extension); - createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler); + createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, rife2Extension.getTemplateDirectories()); exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates); configureAgent(project, plugins, rife2Extension, rife2AgentClasspath); TaskProvider uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates); @@ -128,13 +130,16 @@ public class Rife2Plugin implements Plugin { private void createRife2DevelopmentOnlyConfiguration(Project project, ConfigurationContainer configurations, - DependencyHandler dependencies) { + DependencyHandler dependencies, + ConfigurableFileCollection templateDirectories) { var rife2DevelopmentOnly = configurations.create("rife2DevelopmentOnly", conf -> { conf.setDescription("Dependencies which should only be visible when running the application in development mode (and not in tests)."); conf.setCanBeConsumed(false); conf.setCanBeResolved(false); }); - DEFAULT_TEMPLATES_DIRS.stream().forEachOrdered(dir -> rife2DevelopmentOnly.getDependencies().add(dependencies.create(project.files(dir)))); + rife2DevelopmentOnly.getDependencies().addAllLater(templateDirectories.getElements().map(locations -> + locations.stream().map(fs -> dependencies.create(project.files(fs))).collect(Collectors.toList())) + ); configurations.getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME).extendsFrom(rife2DevelopmentOnly); } @@ -188,6 +193,7 @@ public class Rife2Plugin implements Plugin { rife2.getUseAgent().convention(false); rife2.getUberMainClass().convention(project.getExtensions().getByType(JavaApplication.class).getMainClass() .map(mainClass -> mainClass + "Uber")); + DEFAULT_TEMPLATES_DIRS.stream().forEachOrdered(dir -> rife2.getTemplateDirectories().from(project.files(dir))); return rife2; } @@ -236,7 +242,7 @@ public class Rife2Plugin implements Plugin { task.getVerbose().convention(true); task.getClasspath().from(rife2CompilerClasspath); task.getTypes().convention(rife2Extension.getPrecompiledTemplateTypes()); - DEFAULT_TEMPLATES_DIRS.stream().forEachOrdered(dir -> task.getTemplatesDirectories().from(project.getLayout().getProjectDirectory().dir(dir))); + task.getTemplatesDirectories().from(rife2Extension.getTemplateDirectories()); task.getOutputDirectory().set(project.getLayout().getBuildDirectory().dir(DEFAULT_GENERATED_RIFE2_CLASSES_DIR)); }); }