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

Added support for configurable precompiled template types

This commit is contained in:
Geert Bevin 2023-03-04 11:53:59 -05:00
parent ed8046e83d
commit aeaadfb1cc
5 changed files with 66 additions and 32 deletions

View file

@ -1,5 +1,6 @@
import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.api.tasks.testing.logging.TestLogEvent
import com.uwyn.rife2.gradle.TemplateType.*
plugins { plugins {
id("com.uwyn.rife2") id("com.uwyn.rife2")
@ -29,6 +30,7 @@ rife2 {
mainClass.set("hello.App") mainClass.set("hello.App")
version.set("1.4.0") version.set("1.4.0")
useAgent.set(true) useAgent.set(true)
precompiledTemplateTypes.addAll(HTML)
} }
dependencies { dependencies {

View file

@ -18,6 +18,7 @@ package com.uwyn.rife2.gradle;
import org.gradle.api.DefaultTask; import org.gradle.api.DefaultTask;
import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.DirectoryProperty; import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
import org.gradle.api.tasks.CacheableTask; import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Classpath;
@ -45,7 +46,7 @@ public abstract class PrecompileTemplates extends DefaultTask {
public abstract DirectoryProperty getTemplatesDirectory(); public abstract DirectoryProperty getTemplatesDirectory();
@Input @Input
public abstract Property<String> getType(); public abstract ListProperty<TemplateType> getTypes();
@Input @Input
@Optional @Optional
@ -63,21 +64,23 @@ public abstract class PrecompileTemplates extends DefaultTask {
@TaskAction @TaskAction
public void precompileTemplates() { public void precompileTemplates() {
getExecOperations().javaexec(javaexec -> { for (var type : getTypes().get()) {
javaexec.setClasspath(getClasspath()); getExecOperations().javaexec(javaexec -> {
javaexec.getMainClass().set("rife.template.TemplateDeployer"); javaexec.setClasspath(getClasspath());
List<String> args = new ArrayList<>(); javaexec.getMainClass().set("rife.template.TemplateDeployer");
if (getVerbose().isPresent() && Boolean.TRUE.equals(getVerbose().get())) { List<String> args = new ArrayList<>();
args.add("-verbose"); if (getVerbose().isPresent() && Boolean.TRUE.equals(getVerbose().get())) {
} args.add("-verbose");
args.add("-t"); }
args.add(getType().get()); args.add("-t");
args.add("-d"); args.add(type.identifier());
args.add(getOutputDirectory().get().getAsFile().getPath()); args.add("-d");
args.add("-encoding"); args.add(getOutputDirectory().get().getAsFile().getPath());
args.add(getEncoding().orElse("UTF-8").get()); args.add("-encoding");
args.add(getTemplatesDirectory().get().getAsFile().getPath()); args.add(getEncoding().orElse("UTF-8").get());
javaexec.args(args); args.add(getTemplatesDirectory().get().getAsFile().getPath());
}); javaexec.args(args);
});
}
} }
} }

View file

@ -15,6 +15,7 @@
*/ */
package com.uwyn.rife2.gradle; package com.uwyn.rife2.gradle;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property; import org.gradle.api.provider.Property;
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -26,4 +27,6 @@ public abstract class Rife2Extension {
public abstract Property<Boolean> getUseAgent(); public abstract Property<Boolean> getUseAgent();
public abstract Property<String> getUberMainClass(); public abstract Property<String> getUberMainClass();
public abstract ListProperty<TemplateType> getPrecompiledTemplateTypes();
} }

View file

@ -20,7 +20,6 @@ import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ConfigurationContainer; import org.gradle.api.artifacts.ConfigurationContainer;
import org.gradle.api.artifacts.dsl.DependencyHandler; import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.attributes.Attribute; import org.gradle.api.attributes.Attribute;
import org.gradle.api.attributes.AttributeContainer;
import org.gradle.api.attributes.Bundling; import org.gradle.api.attributes.Bundling;
import org.gradle.api.component.AdhocComponentWithVariants; import org.gradle.api.component.AdhocComponentWithVariants;
import org.gradle.api.component.ConfigurationVariantDetails; import org.gradle.api.component.ConfigurationVariantDetails;
@ -53,17 +52,21 @@ public class Rife2Plugin implements Plugin<Project> {
var configurations = project.getConfigurations(); var configurations = project.getConfigurations();
var dependencyHandler = project.getDependencies(); var dependencyHandler = project.getDependencies();
var tasks = project.getTasks(); var tasks = project.getTasks();
var rife2Configuration = createRife2Configuration(configurations, dependencyHandler, rife2Extension); var rife2Configuration = createRife2Configuration(configurations, dependencyHandler, rife2Extension);
var rife2CompilerClasspath = createRife2CompilerClasspathConfiguration(configurations, rife2Configuration); var rife2CompilerClasspath = createRife2CompilerClasspathConfiguration(configurations, rife2Configuration);
var rife2AgentClasspath = createRife2AgentConfiguration(configurations, dependencyHandler, rife2Extension); var rife2AgentClasspath = createRife2AgentConfiguration(configurations, dependencyHandler, rife2Extension);
configurations.getByName(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME).extendsFrom(rife2Configuration); configurations.getByName(JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME).extendsFrom(rife2Configuration);
var precompileHtmlTemplates = registerPrecompileHtmlTemplateTask(project, rife2CompilerClasspath);
createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileHtmlTemplates); var precompileTemplates = registerPrecompileTemplateTask(project, rife2CompilerClasspath, rife2Extension);
exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileHtmlTemplates); createRife2DevelopmentOnlyConfiguration(project, configurations, dependencyHandler, precompileTemplates);
exposePrecompiledTemplatesToTestTask(project, configurations, dependencyHandler, precompileTemplates);
configureAgent(project, plugins, rife2Extension, rife2AgentClasspath); configureAgent(project, plugins, rife2Extension, rife2AgentClasspath);
registerRunTask(project, rife2Extension, rife2AgentClasspath); registerRunTask(project, rife2Extension, rife2AgentClasspath);
var uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileHtmlTemplates); var uberJarTask = registerUberJarTask(project, plugins, javaPluginExtension, rife2Extension, tasks, precompileTemplates);
bundlePrecompiledTemplatesIntoJarFile(tasks, precompileHtmlTemplates);
bundlePrecompiledTemplatesIntoJarFile(tasks, precompileTemplates);
configureMavenPublishing(project, plugins, configurations, uberJarTask); configureMavenPublishing(project, plugins, configurations, uberJarTask);
} }
@ -103,15 +106,15 @@ public class Rife2Plugin implements Plugin<Project> {
private static void exposePrecompiledTemplatesToTestTask(Project project, private static void exposePrecompiledTemplatesToTestTask(Project project,
ConfigurationContainer configurations, ConfigurationContainer configurations,
DependencyHandler dependencyHandler, DependencyHandler dependencyHandler,
TaskProvider<PrecompileTemplates> precompileTemplates) { TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
configurations.getByName(JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME) configurations.getByName(JavaPlugin.TEST_RUNTIME_ONLY_CONFIGURATION_NAME)
.getDependencies() .getDependencies()
.add(dependencyHandler.create(project.files(precompileTemplates))); .add(dependencyHandler.create(project.files(precompileTemplatesTask)));
} }
private static void bundlePrecompiledTemplatesIntoJarFile(TaskContainer tasks, private static void bundlePrecompiledTemplatesIntoJarFile(TaskContainer tasks,
TaskProvider<PrecompileTemplates> precompileTemplates) { TaskProvider<PrecompileTemplates> precompileTemplatesTask) {
tasks.named("jar", Jar.class, jar -> jar.from(precompileTemplates)); tasks.named("jar", Jar.class, jar -> jar.from(precompileTemplatesTask));
} }
private void createRife2DevelopmentOnlyConfiguration(Project project, private void createRife2DevelopmentOnlyConfiguration(Project project,
@ -210,14 +213,15 @@ public class Rife2Plugin implements Plugin<Project> {
return config; return config;
} }
private static TaskProvider<PrecompileTemplates> registerPrecompileHtmlTemplateTask(Project project, private static TaskProvider<PrecompileTemplates> registerPrecompileTemplateTask(Project project,
Configuration rife2CompilerClasspath) { Configuration rife2CompilerClasspath,
return project.getTasks().register("precompileHtmlTemplates", PrecompileTemplates.class, task -> { Rife2Extension rife2Extension) {
return project.getTasks().register("precompileTemplates", PrecompileTemplates.class, task -> {
task.setGroup(RIFE2_GROUP); task.setGroup(RIFE2_GROUP);
task.setDescription("Pre-compiles the HTML templates."); task.setDescription("Pre-compiles the templates.");
task.getVerbose().convention(true); task.getVerbose().convention(true);
task.getClasspath().from(rife2CompilerClasspath); task.getClasspath().from(rife2CompilerClasspath);
task.getType().convention("html"); task.getTypes().convention(rife2Extension.getPrecompiledTemplateTypes());
task.getTemplatesDirectory().set(project.getLayout().getProjectDirectory().dir(DEFAULT_TEMPLATES_DIR)); task.getTemplatesDirectory().set(project.getLayout().getProjectDirectory().dir(DEFAULT_TEMPLATES_DIR));
task.getOutputDirectory().set(project.getLayout().getBuildDirectory().dir(DEFAULT_GENERATED_RIFE2_CLASSES_DIR)); task.getOutputDirectory().set(project.getLayout().getBuildDirectory().dir(DEFAULT_GENERATED_RIFE2_CLASSES_DIR));
}); });

View file

@ -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_;
}
}