From 6bbdc608b2d280a3e99ed8fed723805cab513325 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 27 Apr 2022 09:12:51 +0200 Subject: [PATCH] Add support for Groovy 4 Closes gh-1312 --- .../groovy/GroovyDependenciesConfigurer.java | 11 +++- ...ationDefaultContributorsConfiguration.java | 10 ++- .../spring/build/BuildComplianceTests.java | 13 +++- .../project/groovy/next/build.gradle.gen | 23 +++++++ .../project/groovy/next/build.gradle.kts.gen | 23 +++++++ .../resources/project/groovy/next/pom.xml.gen | 64 +++++++++++++++++++ 6 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen create mode 100644 initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.kts.gen create mode 100644 initializr-generator-spring/src/test/resources/project/groovy/next/pom.xml.gen diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyDependenciesConfigurer.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyDependenciesConfigurer.java index 91730a1a..145c1d1c 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyDependenciesConfigurer.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyDependenciesConfigurer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,9 +28,16 @@ import io.spring.initializr.generator.spring.build.BuildCustomizer; */ class GroovyDependenciesConfigurer implements BuildCustomizer { + private final boolean isUsingGroovy4; + + GroovyDependenciesConfigurer(boolean isUsingGroovy4) { + this.isUsingGroovy4 = isUsingGroovy4; + } + @Override public void customize(Build build) { - build.dependencies().add("groovy", "org.codehaus.groovy", "groovy", DependencyScope.COMPILE); + String groupId = this.isUsingGroovy4 ? "org.apache.groovy" : "org.codehaus.groovy"; + build.dependencies().add("groovy", groupId, "groovy", DependencyScope.COMPILE); } } diff --git a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyProjectGenerationDefaultContributorsConfiguration.java b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyProjectGenerationDefaultContributorsConfiguration.java index 89fde06e..ec9ba40b 100644 --- a/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyProjectGenerationDefaultContributorsConfiguration.java +++ b/initializr-generator-spring/src/main/java/io/spring/initializr/generator/spring/code/groovy/GroovyProjectGenerationDefaultContributorsConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,8 @@ import io.spring.initializr.generator.spring.build.BuildCustomizer; import io.spring.initializr.generator.spring.code.MainApplicationTypeCustomizer; import io.spring.initializr.generator.spring.code.ServletInitializerCustomizer; import io.spring.initializr.generator.spring.code.TestApplicationTypeCustomizer; +import io.spring.initializr.generator.version.VersionParser; +import io.spring.initializr.generator.version.VersionRange; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -49,6 +51,8 @@ import org.springframework.context.annotation.Configuration; @Configuration class GroovyProjectGenerationDefaultContributorsConfiguration { + private static final VersionRange GROOVY4 = VersionParser.DEFAULT.parseRange("3.0.0-M2"); + @Bean MainApplicationTypeCustomizer mainMethodContributor() { return (typeDeclaration) -> typeDeclaration.addMethodDeclaration( @@ -69,8 +73,8 @@ class GroovyProjectGenerationDefaultContributorsConfiguration { } @Bean - BuildCustomizer groovyDependenciesConfigurer() { - return new GroovyDependenciesConfigurer(); + BuildCustomizer groovyDependenciesConfigurer(ProjectDescription description) { + return new GroovyDependenciesConfigurer(GROOVY4.match(description.getPlatformVersion())); } /** diff --git a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/BuildComplianceTests.java b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/BuildComplianceTests.java index dd3df536..75aaab59 100755 --- a/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/BuildComplianceTests.java +++ b/initializr-generator-spring/src/test/java/io/spring/initializr/generator/spring/build/BuildComplianceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2021 the original author or authors. + * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -87,6 +87,17 @@ class BuildComplianceTests extends AbstractComplianceTests { new ClassPathResource("project/" + language + "/standard/" + getAssertFileName(fileName))); } + @ParameterizedTest + @MethodSource("parameters") + void nextGenerationJarGroovy(BuildSystem build, String fileName) { + testNextGenerationJar(new GroovyLanguage("17"), build, fileName); + } + + private void testNextGenerationJar(Language language, BuildSystem build, String fileName) { + assertThat(generateProject(language, build, "3.0.0")).textFile(fileName).hasSameContentAs( + new ClassPathResource("project/" + language + "/next/" + getAssertFileName(fileName))); + } + @ParameterizedTest @MethodSource("parameters") void currentGenerationWarJava(BuildSystem build, String fileName) { diff --git a/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen new file mode 100644 index 00000000..1da69a99 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.gen @@ -0,0 +1,23 @@ +plugins { + id 'org.springframework.boot' version '3.0.0' + id 'io.spring.dependency-management' version '1.0.6.RELEASE' + id 'groovy' +} + +group = 'com.example' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '17' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter' + implementation 'org.apache.groovy:groovy' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.kts.gen new file mode 100644 index 00000000..b205eba3 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/groovy/next/build.gradle.kts.gen @@ -0,0 +1,23 @@ +plugins { + id("org.springframework.boot") version "3.0.0" + id("io.spring.dependency-management") version "1.0.6.RELEASE" + groovy +} + +group = "com.example" +version = "0.0.1-SNAPSHOT" +java.sourceCompatibility = JavaVersion.VERSION_17 + +repositories { + mavenCentral() +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter") + implementation("org.apache.groovy:groovy") + testImplementation("org.springframework.boot:spring-boot-starter-test") +} + +tasks.withType { + useJUnitPlatform() +} diff --git a/initializr-generator-spring/src/test/resources/project/groovy/next/pom.xml.gen b/initializr-generator-spring/src/test/resources/project/groovy/next/pom.xml.gen new file mode 100644 index 00000000..07250e29 --- /dev/null +++ b/initializr-generator-spring/src/test/resources/project/groovy/next/pom.xml.gen @@ -0,0 +1,64 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.0 + + + com.example + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + 17 + + + + org.springframework.boot + spring-boot-starter + + + org.apache.groovy + groovy + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.codehaus.gmavenplus + gmavenplus-plugin + 1.13.1 + + + + addSources + addTestSources + generateStubs + compile + generateTestStubs + compileTests + removeStubs + removeTestStubs + + + + + + + +