mirror of
https://gitee.com/dcren/initializr.git
synced 2025-12-17 09:35:53 +08:00
Correct Kotlin DSL syntax for adding and customizing configurations
Fixes gh-917
This commit is contained in:
@@ -18,7 +18,6 @@ package io.spring.initializr.generator.spring.build.gradle;
|
||||
|
||||
import io.spring.initializr.generator.buildsystem.DependencyScope;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.ConfigurationCustomization;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
@@ -37,11 +36,7 @@ class GradleConfigurationBuildCustomizerTests {
|
||||
build.dependencies().add("servlet", "javax.servlet", "servlet-api",
|
||||
DependencyScope.PROVIDED_RUNTIME);
|
||||
customize(build);
|
||||
assertThat(build.getConfigurationCustomizations())
|
||||
.containsOnlyKeys("providedRuntime");
|
||||
ConfigurationCustomization providedRuntime = build
|
||||
.getConfigurationCustomizations().get("providedRuntime");
|
||||
assertThat(providedRuntime.getExtendsFrom()).isEmpty();
|
||||
assertThat(build.getConfigurations()).containsOnly("providedRuntime");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -10,7 +10,7 @@ java.sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom(configurations.annotationProcessor.get())
|
||||
extendsFrom(annotationProcessor)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,6 +50,8 @@ public class GradleBuild extends Build {
|
||||
|
||||
private final List<String> appliedPlugins = new ArrayList<>();
|
||||
|
||||
private final List<String> configurations = new ArrayList<>();
|
||||
|
||||
private final Map<String, ConfigurationCustomization> configurationCustomizations = new LinkedHashMap<>();
|
||||
|
||||
private final Map<String, TaskCustomization> taskCustomizations = new LinkedHashMap<>();
|
||||
@@ -122,14 +124,17 @@ public class GradleBuild extends Build {
|
||||
}
|
||||
|
||||
public void addConfiguration(String configurationName) {
|
||||
customizeConfiguration(configurationName, (configuration) -> {
|
||||
});
|
||||
this.configurations.add(configurationName);
|
||||
}
|
||||
|
||||
public Map<String, ConfigurationCustomization> getConfigurationCustomizations() {
|
||||
return Collections.unmodifiableMap(this.configurationCustomizations);
|
||||
}
|
||||
|
||||
public List<String> getConfigurations() {
|
||||
return Collections.unmodifiableList(this.configurations);
|
||||
}
|
||||
|
||||
public Set<String> getImportedTypes() {
|
||||
return Collections.unmodifiableSet(this.importedTypes);
|
||||
}
|
||||
|
||||
@@ -85,18 +85,8 @@ public abstract class GradleBuildWriter {
|
||||
protected abstract void writeJavaSourceCompatibility(IndentingWriter writer,
|
||||
GradleBuild build);
|
||||
|
||||
private void writeConfigurations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, ConfigurationCustomization> configurationCustomizations = build
|
||||
.getConfigurationCustomizations();
|
||||
if (configurationCustomizations.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println("configurations {");
|
||||
writer.indented(() -> configurationCustomizations.forEach((name,
|
||||
customization) -> writeConfiguration(writer, name, customization)));
|
||||
writer.println("}");
|
||||
writer.println("");
|
||||
}
|
||||
protected abstract void writeConfigurations(IndentingWriter writer,
|
||||
GradleBuild build);
|
||||
|
||||
protected abstract void writeConfiguration(IndentingWriter writer,
|
||||
String configurationName,
|
||||
|
||||
@@ -24,6 +24,7 @@ import io.spring.initializr.generator.buildsystem.BillOfMaterials;
|
||||
import io.spring.initializr.generator.buildsystem.Dependency;
|
||||
import io.spring.initializr.generator.buildsystem.Dependency.Exclusion;
|
||||
import io.spring.initializr.generator.buildsystem.MavenRepository;
|
||||
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.ConfigurationCustomization;
|
||||
import io.spring.initializr.generator.io.IndentingWriter;
|
||||
import io.spring.initializr.generator.version.VersionProperty;
|
||||
import io.spring.initializr.generator.version.VersionReference;
|
||||
@@ -93,15 +94,10 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
|
||||
@Override
|
||||
protected void writeConfiguration(IndentingWriter writer, String configurationName,
|
||||
GradleBuild.ConfigurationCustomization configurationCustomization) {
|
||||
if (configurationCustomization.getExtendsFrom().isEmpty()) {
|
||||
writer.println(configurationName);
|
||||
}
|
||||
else {
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom %s",
|
||||
String.join(", ", configurationCustomization.getExtendsFrom()))));
|
||||
writer.println("}");
|
||||
}
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom %s",
|
||||
String.join(", ", configurationCustomization.getExtendsFrom()))));
|
||||
writer.println("}");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -124,6 +120,24 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
|
||||
return String.format("set('%s', %s)", key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeConfigurations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, ConfigurationCustomization> configurationCustomizations = build
|
||||
.getConfigurationCustomizations();
|
||||
List<String> configurations = build.getConfigurations();
|
||||
if (configurations.isEmpty() && configurationCustomizations.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println("configurations {");
|
||||
writer.indented(() -> {
|
||||
configurations.forEach(writer::println);
|
||||
configurationCustomizations.forEach((name,
|
||||
customization) -> writeConfiguration(writer, name, customization));
|
||||
});
|
||||
writer.println("}");
|
||||
writer.println("");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeDependency(IndentingWriter writer, Dependency dependency) {
|
||||
String quoteStyle = determineQuoteStyle(dependency.getVersion());
|
||||
|
||||
@@ -117,7 +117,6 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
|
||||
writer.println(configurationName + " {");
|
||||
writer.indented(() -> writer.println(String.format("extendsFrom(%s)",
|
||||
configurationCustomization.getExtendsFrom().stream()
|
||||
.map((c) -> "configurations." + c + ".get()")
|
||||
.collect(Collectors.joining(", ")))));
|
||||
writer.println("}");
|
||||
}
|
||||
@@ -131,6 +130,23 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
|
||||
return "maven { url = uri(\"" + repository.getUrl() + "\") }";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeConfigurations(IndentingWriter writer, GradleBuild build) {
|
||||
Map<String, ConfigurationCustomization> configurationCustomizations = build
|
||||
.getConfigurationCustomizations();
|
||||
for (String configuration : build.getConfigurations()) {
|
||||
writer.println("val " + configuration + " by configurations.creating");
|
||||
}
|
||||
if (configurationCustomizations.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
writer.println("configurations {");
|
||||
writer.indented(() -> configurationCustomizations.forEach((name,
|
||||
customization) -> writeConfiguration(writer, name, customization)));
|
||||
writer.println("}");
|
||||
writer.println("");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeDependency(IndentingWriter writer, Dependency dependency) {
|
||||
String version = determineVersion(dependency.getVersion());
|
||||
|
||||
@@ -290,35 +290,33 @@ class KotlinDslGradleBuildWriterTests {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.addConfiguration("developmentOnly");
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly",
|
||||
"}");
|
||||
assertThat(lines)
|
||||
.containsSequence("val developmentOnly by configurations.creating");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithConfigurationCustomization() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("compile"));
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("testCompile"));
|
||||
build.customizeConfiguration("runtimeClasspath",
|
||||
(configuration) -> configuration.extendsFrom("custom1"));
|
||||
build.customizeConfiguration("runtimeClasspath",
|
||||
(configuration) -> configuration.extendsFrom("custom2"));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly {",
|
||||
" extendsFrom(configurations.compile.get(), configurations.testCompile.get())",
|
||||
" }", "}");
|
||||
assertThat(lines).containsSequence("configurations {", " runtimeClasspath {",
|
||||
" extendsFrom(custom1, custom2)", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
void gradleBuildWithConfigurationCustomizations() throws Exception {
|
||||
GradleBuild build = new GradleBuild();
|
||||
build.customizeConfiguration("developmentOnly",
|
||||
(configuration) -> configuration.extendsFrom("compile"));
|
||||
build.customizeConfiguration("testOnly",
|
||||
(configuration) -> configuration.extendsFrom("testCompile"));
|
||||
build.customizeConfiguration("runtimeClasspath",
|
||||
(configuration) -> configuration.extendsFrom("custom1"));
|
||||
build.customizeConfiguration("testRuntimeClasspath",
|
||||
(configuration) -> configuration.extendsFrom("custom2"));
|
||||
List<String> lines = generateBuild(build);
|
||||
assertThat(lines).containsSequence("configurations {", " developmentOnly {",
|
||||
" extendsFrom(configurations.compile.get())", " }",
|
||||
" testOnly {", " extendsFrom(configurations.testCompile.get())",
|
||||
" }", "}");
|
||||
assertThat(lines).containsSequence("configurations {", " runtimeClasspath {",
|
||||
" extendsFrom(custom1)", " }", " testRuntimeClasspath {",
|
||||
" extendsFrom(custom2)", " }", "}");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user