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