From 9e4e596ad6fe113eeb576914af578b23ffa2d95f Mon Sep 17 00:00:00 2001 From: Guillaume Le Floch Date: Tue, 17 May 2022 21:49:51 +0200 Subject: [PATCH 1/2] Leverage delayed property configuration for Gradle extensiton plugin --- .../gradle/QuarkusExtensionConfiguration.java | 68 +++++++++++-------- .../gradle/QuarkusExtensionPlugin.java | 4 +- .../gradle/tasks/ExtensionDescriptorTask.java | 19 +++--- 3 files changed, 52 insertions(+), 39 deletions(-) diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionConfiguration.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionConfiguration.java index 219c5afe1479e..e93d892da4479 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionConfiguration.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionConfiguration.java @@ -4,99 +4,113 @@ import org.gradle.api.Action; import org.gradle.api.Project; +import org.gradle.api.provider.ListProperty; +import org.gradle.api.provider.Property; import io.quarkus.extension.gradle.dsl.Capabilities; import io.quarkus.extension.gradle.dsl.Capability; public class QuarkusExtensionConfiguration { - private boolean disableValidation; - private String deploymentArtifact; - private String deploymentModule; - private List excludedArtifacts; - private List parentFirstArtifacts; - private List runnerParentFirstArtifacts; - private List lesserPriorityArtifacts; - private List conditionalDependencies; - private List dependencyCondition; + private Property disableValidation; + private Property deploymentArtifact; + private Property deploymentModule; + private ListProperty excludedArtifacts; + private ListProperty parentFirstArtifacts; + private ListProperty runnerParentFirstArtifacts; + private ListProperty lesserPriorityArtifacts; + private ListProperty conditionalDependencies; + private ListProperty dependencyCondition; private Capabilities capabilities = new Capabilities(); private Project project; public QuarkusExtensionConfiguration(Project project) { this.project = project; + disableValidation = project.getObjects().property(Boolean.class); + disableValidation.convention(false); + deploymentArtifact = project.getObjects().property(String.class); + deploymentModule = project.getObjects().property(String.class); + deploymentModule.convention("deployment"); + + excludedArtifacts = project.getObjects().listProperty(String.class); + parentFirstArtifacts = project.getObjects().listProperty(String.class); + runnerParentFirstArtifacts = project.getObjects().listProperty(String.class); + lesserPriorityArtifacts = project.getObjects().listProperty(String.class); + conditionalDependencies = project.getObjects().listProperty(String.class); + dependencyCondition = project.getObjects().listProperty(String.class); } public void setDisableValidation(boolean disableValidation) { - this.disableValidation = disableValidation; + this.disableValidation.set(disableValidation); } - public boolean isValidationDisabled() { + public Property isValidationDisabled() { return disableValidation; } - public String getDeploymentArtifact() { + public Property getDeploymentArtifact() { return deploymentArtifact; } public void setDeploymentArtifact(String deploymentArtifact) { - this.deploymentArtifact = deploymentArtifact; + this.deploymentArtifact.set(deploymentArtifact); } - public String getDeploymentModule() { + public Property getDeploymentModule() { return deploymentModule; } public void setDeploymentModule(String deploymentModule) { - this.deploymentModule = deploymentModule; + this.deploymentModule.set(deploymentModule); } - public List getExcludedArtifacts() { + public ListProperty getExcludedArtifacts() { return excludedArtifacts; } public void setExcludedArtifacts(List excludedArtifacts) { - this.excludedArtifacts = excludedArtifacts; + this.excludedArtifacts.addAll(excludedArtifacts); } - public List getParentFirstArtifacts() { + public ListProperty getParentFirstArtifacts() { return parentFirstArtifacts; } public void setParentFirstArtifacts(List parentFirstArtifacts) { - this.parentFirstArtifacts = parentFirstArtifacts; + this.parentFirstArtifacts.addAll(parentFirstArtifacts); } - public List getRunnerParentFirstArtifacts() { + public ListProperty getRunnerParentFirstArtifacts() { return runnerParentFirstArtifacts; } public void setRunnerParentFirstArtifacts(List runnerParentFirstArtifacts) { - this.runnerParentFirstArtifacts = runnerParentFirstArtifacts; + this.runnerParentFirstArtifacts.addAll(runnerParentFirstArtifacts); } - public List getLesserPriorityArtifacts() { + public ListProperty getLesserPriorityArtifacts() { return lesserPriorityArtifacts; } public void setLesserPriorityArtifacts(List lesserPriorityArtifacts) { - this.lesserPriorityArtifacts = lesserPriorityArtifacts; + this.lesserPriorityArtifacts.addAll(lesserPriorityArtifacts); } - public List getConditionalDependencies() { + public ListProperty getConditionalDependencies() { return conditionalDependencies; } public void setConditionalDependencies(List conditionalDependencies) { - this.conditionalDependencies = conditionalDependencies; + this.conditionalDependencies.addAll(conditionalDependencies); } - public List getDependencyConditions() { + public ListProperty getDependencyConditions() { return dependencyCondition; } public void setDependencyConditions(List dependencyCondition) { - this.dependencyCondition = dependencyCondition; + this.dependencyCondition.addAll(dependencyCondition); } public List getProvidedCapabilities() { diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java index 7752084a678d3..02d8b1627a91f 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java @@ -61,7 +61,7 @@ private void registerTasks(Project project, QuarkusExtensionConfiguration quarku ValidateExtensionTask.class, task -> { task.setRuntimeModuleClasspath(runtimeModuleClasspath); task.setQuarkusExtensionConfiguration(quarkusExt); - task.onlyIf(t -> !quarkusExt.isValidationDisabled()); + task.onlyIf(t -> !quarkusExt.isValidationDisabled().get()); }); project.getPlugins().withType( @@ -131,7 +131,7 @@ private void addAnnotationProcessorDependency(Project project) { private Project findDeploymentProject(Project project, QuarkusExtensionConfiguration configuration) { - String deploymentProjectName = configuration.getDeploymentModule(); + String deploymentProjectName = configuration.getDeploymentModule().get(); if (deploymentProjectName == null) { deploymentProjectName = DEFAULT_DEPLOYMENT_PROJECT_NAME; } diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java index 4532277251b2b..b5237521b330f 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java @@ -90,13 +90,12 @@ public void generateExtensionDescriptor() throws IOException { private void generateQuarkusExtensionProperties(Path metaInfDir) { final Properties props = new Properties(); - String deploymentArtifact = quarkusExtensionConfiguration.getDeploymentArtifact(); - if (quarkusExtensionConfiguration.getDeploymentArtifact() == null) { - deploymentArtifact = quarkusExtensionConfiguration.getDefaultDeployementArtifactName(); - } + String deploymentArtifact = quarkusExtensionConfiguration.getDeploymentArtifact() + .getOrElse(quarkusExtensionConfiguration.getDefaultDeployementArtifactName()); + props.setProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT, deploymentArtifact); - List conditionalDependencies = quarkusExtensionConfiguration.getConditionalDependencies(); + List conditionalDependencies = quarkusExtensionConfiguration.getConditionalDependencies().get(); if (conditionalDependencies != null && !conditionalDependencies.isEmpty()) { final StringBuilder buf = new StringBuilder(); int i = 0; @@ -107,7 +106,7 @@ private void generateQuarkusExtensionProperties(Path metaInfDir) { props.setProperty(BootstrapConstants.CONDITIONAL_DEPENDENCIES, buf.toString()); } - List dependencyConditions = quarkusExtensionConfiguration.getDependencyConditions(); + List dependencyConditions = quarkusExtensionConfiguration.getDependencyConditions().get(); if (dependencyConditions != null && !dependencyConditions.isEmpty()) { final StringBuilder buf = new StringBuilder(); int i = 0; @@ -118,25 +117,25 @@ private void generateQuarkusExtensionProperties(Path metaInfDir) { props.setProperty(BootstrapConstants.DEPENDENCY_CONDITION, buf.toString()); } - List parentFirstArtifacts = quarkusExtensionConfiguration.getParentFirstArtifacts(); + List parentFirstArtifacts = quarkusExtensionConfiguration.getParentFirstArtifacts().get(); if (parentFirstArtifacts != null && !parentFirstArtifacts.isEmpty()) { String val = String.join(",", parentFirstArtifacts); props.put(AppModel.PARENT_FIRST_ARTIFACTS, val); } - List runnerParentFirstArtifacts = quarkusExtensionConfiguration.getRunnerParentFirstArtifacts(); + List runnerParentFirstArtifacts = quarkusExtensionConfiguration.getRunnerParentFirstArtifacts().get(); if (runnerParentFirstArtifacts != null && !runnerParentFirstArtifacts.isEmpty()) { String val = String.join(",", runnerParentFirstArtifacts); props.put(AppModel.RUNNER_PARENT_FIRST_ARTIFACTS, val); } - List excludedArtifacts = quarkusExtensionConfiguration.getExcludedArtifacts(); + List excludedArtifacts = quarkusExtensionConfiguration.getExcludedArtifacts().get(); if (excludedArtifacts != null && !excludedArtifacts.isEmpty()) { String val = String.join(",", excludedArtifacts); props.put(AppModel.EXCLUDED_ARTIFACTS, val); } - List lesserPriorityArtifacts = quarkusExtensionConfiguration.getLesserPriorityArtifacts(); + List lesserPriorityArtifacts = quarkusExtensionConfiguration.getLesserPriorityArtifacts().get(); if (lesserPriorityArtifacts != null && !lesserPriorityArtifacts.isEmpty()) { String val = String.join(",", lesserPriorityArtifacts); props.put(AppModel.LESSER_PRIORITY_ARTIFACTS, val); From ad086f941f2087acf6a6907cac2972c0a714d992 Mon Sep 17 00:00:00 2001 From: Guillaume Le Floch Date: Tue, 17 May 2022 21:52:49 +0200 Subject: [PATCH 2/2] Leverage constructor injection in Gradle extension plugin --- .../gradle/QuarkusExtensionPlugin.java | 18 +++------- .../gradle/tasks/ExtensionDescriptorTask.java | 33 ++++++++----------- .../gradle/tasks/ValidateExtensionTask.java | 16 ++++----- 3 files changed, 26 insertions(+), 41 deletions(-) diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java index 02d8b1627a91f..53748e12a4481 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/QuarkusExtensionPlugin.java @@ -44,25 +44,17 @@ public void apply(Project project) { private void registerTasks(Project project, QuarkusExtensionConfiguration quarkusExt) { TaskContainer tasks = project.getTasks(); + + JavaPluginConvention convention = project.getConvention().getPlugin(JavaPluginConvention.class); + SourceSet mainSourceSet = convention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); Configuration runtimeModuleClasspath = project.getConfigurations() .getByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME); TaskProvider extensionDescriptorTask = tasks.register(EXTENSION_DESCRIPTOR_TASK_NAME, - ExtensionDescriptorTask.class, task -> { - JavaPluginConvention convention = project.getConvention().getPlugin(JavaPluginConvention.class); - SourceSet mainSourceSet = convention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME); - task.setOutputResourcesDir(mainSourceSet.getOutput().getResourcesDir()); - task.setInputResourcesDir(mainSourceSet.getResources().getSourceDirectories().getAsPath()); - task.setQuarkusExtensionConfiguration(quarkusExt); - task.setClasspath(runtimeModuleClasspath); - }); + ExtensionDescriptorTask.class, quarkusExt, mainSourceSet, runtimeModuleClasspath); TaskProvider validateExtensionTask = tasks.register(VALIDATE_EXTENSION_TASK_NAME, - ValidateExtensionTask.class, task -> { - task.setRuntimeModuleClasspath(runtimeModuleClasspath); - task.setQuarkusExtensionConfiguration(quarkusExt); - task.onlyIf(t -> !quarkusExt.isValidationDisabled().get()); - }); + ValidateExtensionTask.class, quarkusExt, runtimeModuleClasspath); project.getPlugins().withType( JavaPlugin.class, diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java index b5237521b330f..2c70cae042424 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ExtensionDescriptorTask.java @@ -13,12 +13,15 @@ import java.util.Properties; import java.util.Set; +import javax.inject.Inject; + import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; import org.gradle.api.artifacts.Configuration; import org.gradle.api.artifacts.ModuleVersionIdentifier; import org.gradle.api.artifacts.ResolvedArtifact; import org.gradle.api.tasks.Classpath; +import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskAction; import com.fasterxml.jackson.core.util.DefaultIndenter; @@ -44,34 +47,26 @@ */ public class ExtensionDescriptorTask extends DefaultTask { - private QuarkusExtensionConfiguration quarkusExtensionConfiguration; - private Configuration classpath; - private File outputResourcesDir; - private String inputResourcesDir; + private final QuarkusExtensionConfiguration quarkusExtensionConfiguration; + private final Configuration classpath; + private final File outputResourcesDir; + private final String inputResourcesDir; private static final String GROUP_ID = "group-id"; private static final String ARTIFACT_ID = "artifact-id"; private static final String METADATA = "metadata"; - public ExtensionDescriptorTask() { + @Inject + public ExtensionDescriptorTask(QuarkusExtensionConfiguration quarkusExtensionConfiguration, SourceSet mainSourceSet, + Configuration runtimeClasspath) { + setDescription("Generate extension descriptor file"); setGroup("quarkus"); - } - - public void setOutputResourcesDir(File outputResourcesDir) { - this.outputResourcesDir = outputResourcesDir; - } - public void setInputResourcesDir(String inputResourcesDir) { - this.inputResourcesDir = inputResourcesDir; - } - - public void setQuarkusExtensionConfiguration(QuarkusExtensionConfiguration quarkusExtensionConfiguration) { this.quarkusExtensionConfiguration = quarkusExtensionConfiguration; - } - - public void setClasspath(Configuration classpath) { - this.classpath = classpath; + this.outputResourcesDir = mainSourceSet.getOutput().getResourcesDir(); + this.inputResourcesDir = mainSourceSet.getResources().getSourceDirectories().getAsPath(); + this.classpath = runtimeClasspath; } @Classpath diff --git a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ValidateExtensionTask.java b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ValidateExtensionTask.java index 1eb0f28d56d0d..be96802daf78d 100644 --- a/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ValidateExtensionTask.java +++ b/devtools/gradle/gradle-extension-plugin/src/main/java/io/quarkus/extension/gradle/tasks/ValidateExtensionTask.java @@ -4,6 +4,8 @@ import java.util.List; import java.util.Set; +import javax.inject.Inject; + import org.gradle.api.DefaultTask; import org.gradle.api.GradleException; import org.gradle.api.artifacts.Configuration; @@ -20,17 +22,17 @@ public class ValidateExtensionTask extends DefaultTask { - private QuarkusExtensionConfiguration extensionConfiguration; private Configuration runtimeModuleClasspath; private Configuration deploymentModuleClasspath; - public ValidateExtensionTask() { + @Inject + public ValidateExtensionTask(QuarkusExtensionConfiguration quarkusExtensionConfiguration, + Configuration runtimeModuleClasspath) { setDescription("Validate extension dependencies"); setGroup("quarkus"); - } - public void setQuarkusExtensionConfiguration(QuarkusExtensionConfiguration extensionConfiguration) { - this.extensionConfiguration = extensionConfiguration; + this.runtimeModuleClasspath = runtimeModuleClasspath; + this.onlyIf(t -> !quarkusExtensionConfiguration.isValidationDisabled().get()); } @Internal @@ -38,10 +40,6 @@ public Configuration getRuntimeModuleClasspath() { return this.runtimeModuleClasspath; } - public void setRuntimeModuleClasspath(Configuration runtimeModuleClasspath) { - this.runtimeModuleClasspath = runtimeModuleClasspath; - } - @Internal public Configuration getDeploymentModuleClasspath() { return this.deploymentModuleClasspath;