diff --git a/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.kts.gen b/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.kts.gen index 63d69d1c..6ade62aa 100644 --- a/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.kts.gen +++ b/initializr-generator-spring/src/test/resources/project/gradle/annotation-processor-dependency-build.gradle.kts.gen @@ -10,7 +10,7 @@ java.sourceCompatibility = JavaVersion.VERSION_1_8 configurations { compileOnly { - extendsFrom(annotationProcessor) + extendsFrom(configurations.annotationProcessor.get()) } } diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleBuildWriter.java index 61e38964..eb17690e 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GradleBuildWriter.java @@ -86,7 +86,7 @@ public abstract class GradleBuildWriter { protected abstract void writeConfigurations(IndentingWriter writer, GradleBuild build); protected abstract void writeConfiguration(IndentingWriter writer, String configurationName, - ConfigurationCustomization configurationCustomization); + ConfigurationCustomization configurationCustomization, List customConfigurations); protected final void writeRepositories(IndentingWriter writer, GradleBuild build) { writeNestedCollection(writer, "repositories", build.repositories().items().collect(Collectors.toList()), diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GroovyDslGradleBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GroovyDslGradleBuildWriter.java index ed0efc8f..2dad6036 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GroovyDslGradleBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/GroovyDslGradleBuildWriter.java @@ -89,7 +89,7 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter { @Override protected void writeConfiguration(IndentingWriter writer, String configurationName, - GradleBuild.ConfigurationCustomization configurationCustomization) { + GradleBuild.ConfigurationCustomization configurationCustomization, List customConfigurations) { writer.println(configurationName + " {"); writer.indented(() -> writer.println( String.format("extendsFrom %s", String.join(", ", configurationCustomization.getExtendsFrom())))); @@ -125,7 +125,7 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter { writer.indented(() -> { configurations.forEach(writer::println); configurationCustomizations - .forEach((name, customization) -> writeConfiguration(writer, name, customization)); + .forEach((name, customization) -> writeConfiguration(writer, name, customization, configurations)); }); writer.println("}"); writer.println(""); diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriter.java index 6155156d..cc502b9a 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriter.java @@ -16,8 +16,10 @@ package io.spring.initializr.generator.buildsystem.gradle; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -104,18 +106,27 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter { @Override protected void writeConfiguration(IndentingWriter writer, String configurationName, - ConfigurationCustomization configurationCustomization) { + ConfigurationCustomization configurationCustomization, List customConfigurations) { if (configurationCustomization.getExtendsFrom().isEmpty()) { writer.println(configurationName); } else { writer.println(configurationName + " {"); writer.indented(() -> writer.println(String.format("extendsFrom(%s)", - configurationCustomization.getExtendsFrom().stream().collect(Collectors.joining(", "))))); + configurationCustomization.getExtendsFrom().stream() + .map((name) -> configurationReference(name, customConfigurations)) + .collect(Collectors.joining(", "))))); writer.println("}"); } } + private String configurationReference(String configurationName, Collection customConfigurations) { + if (customConfigurations.contains(configurationName)) { + return configurationName; + } + return "configurations." + configurationName + ".get()"; + } + @Override protected String repositoryAsString(MavenRepository repository) { if (MavenRepository.MAVEN_CENTRAL.equals(repository)) { @@ -127,7 +138,8 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter { @Override protected void writeConfigurations(IndentingWriter writer, GradleBuild build) { Map configurationCustomizations = build.getConfigurationCustomizations(); - for (String configuration : build.getConfigurations()) { + List configurations = build.getConfigurations(); + for (String configuration : configurations) { writer.println("val " + configuration + " by configurations.creating"); } if (configurationCustomizations.isEmpty()) { @@ -135,7 +147,7 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter { } writer.println("configurations {"); writer.indented(() -> configurationCustomizations - .forEach((name, customization) -> writeConfiguration(writer, name, customization))); + .forEach((name, customization) -> writeConfiguration(writer, name, customization, configurations))); writer.println("}"); writer.println(""); } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriterTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriterTests.java index 375c7745..c36f9e7b 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriterTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/gradle/KotlinDslGradleBuildWriterTests.java @@ -277,21 +277,24 @@ class KotlinDslGradleBuildWriterTests { @Test void gradleBuildWithConfigurationCustomization() throws Exception { GradleBuild build = new GradleBuild(); - build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom1")); - build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom2")); + build.addConfiguration("custom"); + build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom")); + build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("builtIn")); List lines = generateBuild(build); - assertThat(lines).containsSequence("configurations {", " runtimeClasspath {", - " extendsFrom(custom1, custom2)", " }", "}"); + assertThat(lines).containsSequence("val custom by configurations.creating", "configurations {", + " runtimeClasspath {", " extendsFrom(custom, configurations.builtIn.get())", " }", "}"); } @Test void gradleBuildWithConfigurationCustomizations() throws Exception { GradleBuild build = new GradleBuild(); - build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom1")); - build.customizeConfiguration("testRuntimeClasspath", (configuration) -> configuration.extendsFrom("custom2")); + build.addConfiguration("custom"); + build.customizeConfiguration("runtimeClasspath", (configuration) -> configuration.extendsFrom("custom")); + build.customizeConfiguration("testRuntimeClasspath", (configuration) -> configuration.extendsFrom("builtIn")); List lines = generateBuild(build); - assertThat(lines).containsSequence("configurations {", " runtimeClasspath {", " extendsFrom(custom1)", - " }", " testRuntimeClasspath {", " extendsFrom(custom2)", " }", "}"); + assertThat(lines).containsSequence("val custom by configurations.creating", "configurations {", + " runtimeClasspath {", " extendsFrom(custom)", " }", " testRuntimeClasspath {", + " extendsFrom(configurations.builtIn.get())", " }", "}"); } @Test