2
0
Fork 0
mirror of https://github.com/ethauvin/rife2-hello.git synced 2025-04-25 07:27:12 -07:00

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"))
}
```
This commit is contained in:
Cedric Champeau 2023-03-05 16:33:36 +01:00
parent de5c974f15
commit d06124c26d
No known key found for this signature in database
GPG key ID: 825C06C827AF6B66
2 changed files with 13 additions and 4 deletions

View file

@ -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<String> getUberMainClass();
public abstract ListProperty<TemplateType> getPrecompiledTemplateTypes();
public abstract ConfigurableFileCollection getTemplateDirectories();
}

View file

@ -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<Project> {
public static final List<String> DEFAULT_TEMPLATES_DIRS = List.of("src/main/resources/templates", "src/main/templates");
@ -65,7 +67,7 @@ public class Rife2Plugin implements Plugin<Project> {
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<Jar> uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates);
@ -128,13 +130,16 @@ public class Rife2Plugin implements Plugin<Project> {
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<Project> {
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<Project> {
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));
});
}