diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersion.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersion.java index 3ee63942..e5f1c90b 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersion.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersion.java @@ -36,6 +36,11 @@ import org.springframework.context.annotation.Conditional; @Conditional(OnGradleVersionCondition.class) public @interface ConditionalOnGradleVersion { - String value(); + /** + * The Gradle generations that should be checked. The condition matches when at least + * one gradle generation matches. + * @return the gradle generation to check + */ + String[] value(); } diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/OnGradleVersionCondition.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/OnGradleVersionCondition.java index cb7df7bf..255ab9bb 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/OnGradleVersionCondition.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/build/gradle/OnGradleVersionCondition.java @@ -16,6 +16,8 @@ package io.spring.initializr.generator.spring.build.gradle; +import java.util.Arrays; + import io.spring.initializr.generator.condition.ProjectGenerationCondition; import io.spring.initializr.generator.project.ResolvedProjectDescription; import io.spring.initializr.generator.version.Version; @@ -43,15 +45,15 @@ public class OnGradleVersionCondition extends ProjectGenerationCondition { @Override protected boolean matches(ResolvedProjectDescription projectDescription, ConditionContext context, AnnotatedTypeMetadata metadata) { - String gradleVersion = determineGradleGeneration( + String gradleGeneration = determineGradleGeneration( projectDescription.getPlatformVersion()); - if (gradleVersion == null) { + if (gradleGeneration == null) { return false; } - String value = (String) metadata + String[] values = (String[]) metadata .getAnnotationAttributes(ConditionalOnGradleVersion.class.getName()) .get("value"); - return gradleVersion.equals(value); + return Arrays.asList(values).contains(gradleGeneration); } private String determineGradleGeneration(Version platformVersion) { diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersionTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersionTests.java index 8c6b19b4..74f8ebc2 100644 --- a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersionTests.java +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/gradle/ConditionalOnGradleVersionTests.java @@ -16,6 +16,8 @@ package io.spring.initializr.generator.spring.build.gradle; +import java.util.Map; + import io.spring.initializr.generator.project.ProjectDescription; import io.spring.initializr.generator.test.project.ProjectAssetTester; import io.spring.initializr.generator.version.Version; @@ -71,6 +73,24 @@ public class ConditionalOnGradleVersionTests { }); } + @Test + void outcomeWithSpringBoot15AndMultipleGenerations() { + ProjectDescription projectDescription = new ProjectDescription(); + projectDescription.setPlatformVersion(Version.parse("1.5.18.RELEASE")); + Map candidates = candidatesFor(projectDescription, + Gradle3Or4TestConfiguration.class); + assertThat(candidates).containsOnlyKeys("gradle3", "gradle3AndLater"); + } + + @Test + void outcomeWithSpringBoot2AndMultipleGenerations() { + ProjectDescription projectDescription = new ProjectDescription(); + projectDescription.setPlatformVersion(Version.parse("2.0.9.RELEASE")); + Map candidates = candidatesFor(projectDescription, + Gradle3Or4TestConfiguration.class); + assertThat(candidates).containsOnlyKeys("gradle4", "gradle3AndLater"); + } + private String outcomeFor(ProjectDescription projectDescription) { return this.projectTester.generate(projectDescription, (projectGenerationContext) -> { @@ -80,6 +100,12 @@ public class ConditionalOnGradleVersionTests { }); } + private Map candidatesFor(ProjectDescription projectDescription, + Class... extraConfigurations) { + return this.projectTester.withConfiguration(extraConfigurations).generate( + projectDescription, (context) -> context.getBeansOfType(String.class)); + } + @Configuration static class GradleVersionTestConfiguration { @@ -97,4 +123,15 @@ public class ConditionalOnGradleVersionTests { } + @Configuration + static class Gradle3Or4TestConfiguration { + + @Bean + @ConditionalOnGradleVersion({ "3", "4" }) + public String gradle3AndLater() { + return "testGradle3AndLater"; + } + + } + }