Harmonize Gradle build to use containers

See gh-996
This commit is contained in:
Stephane Nicoll
2019-09-04 11:05:09 +02:00
parent 59f9092e2f
commit 04a78a94d6
23 changed files with 984 additions and 361 deletions

View File

@@ -35,7 +35,7 @@ public class GradleAnnotationProcessorScopeBuildCustomizer implements BuildCusto
boolean annotationProcessorUsed = build.dependencies().items()
.anyMatch((dependency) -> dependency.getScope() == DependencyScope.ANNOTATION_PROCESSOR);
if (annotationProcessorUsed) {
build.customizeConfiguration("compileOnly",
build.configurations().customize("compileOnly",
(configuration) -> configuration.extendsFrom("annotationProcessor"));
}
}

View File

@@ -35,7 +35,7 @@ public class GradleConfigurationBuildCustomizer implements BuildCustomizer<Gradl
.anyMatch((dependency) -> DependencyScope.PROVIDED_RUNTIME.equals(dependency.getScope()));
boolean war = build.plugins().values().anyMatch((plugin) -> plugin.getId().equals("war"));
if (providedRuntimeUsed && !war) {
build.addConfiguration("providedRuntime");
build.configurations().add("providedRuntime");
}
}

View File

@@ -213,7 +213,7 @@ public class GradleProjectGenerationConfiguration {
@Bean
@ConditionalOnPlatformVersion("2.2.0.M3")
BuildCustomizer<GradleBuild> testTaskContributor() {
return (build) -> build.customizeTask("test", (test) -> test.invoke("useJUnitPlatform"));
return (build) -> build.tasks().customize("test", (test) -> test.invoke("useJUnitPlatform"));
}
@Bean
@@ -246,7 +246,7 @@ public class GradleProjectGenerationConfiguration {
@Bean
@ConditionalOnPlatformVersion("2.2.0.M3")
BuildCustomizer<GradleBuild> testTaskContributor() {
return (build) -> build.customizeTasksWithType("Test", (test) -> test.invoke("useJUnitPlatform"));
return (build) -> build.tasks().customizeWithType("Test", (test) -> test.invoke("useJUnitPlatform"));
}
@Bean

View File

@@ -18,7 +18,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.GradleTask;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
@@ -33,12 +33,12 @@ class GroovyDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
}
@Override
protected void customizeKotlinOptions(KotlinProjectSettings settings, TaskCustomization compile) {
protected void customizeKotlinOptions(KotlinProjectSettings settings, GradleTask.Builder compile) {
compile.nested("kotlinOptions", (kotlinOptions) -> {
String compilerArgs = settings.getCompilerArgs().stream().map((arg) -> "'" + arg + "'")
.collect(Collectors.joining(", "));
kotlinOptions.set("freeCompilerArgs", "[" + compilerArgs + "]");
kotlinOptions.set("jvmTarget", "'" + settings.getJvmTarget() + "'");
kotlinOptions.attribute("freeCompilerArgs", "[" + compilerArgs + "]");
kotlinOptions.attribute("jvmTarget", "'" + settings.getJvmTarget() + "'");
});
}

View File

@@ -18,7 +18,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.GradleTask;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
@@ -33,12 +33,12 @@ class KotlinDslKotlinGradleBuildCustomizer extends KotlinGradleBuildCustomizer {
}
@Override
protected void customizeKotlinOptions(KotlinProjectSettings settings, TaskCustomization compile) {
protected void customizeKotlinOptions(KotlinProjectSettings settings, GradleTask.Builder compile) {
compile.nested("kotlinOptions", (kotlinOptions) -> {
String compilerArgs = settings.getCompilerArgs().stream().map((arg) -> "\"" + arg + "\"")
.collect(Collectors.joining(", "));
kotlinOptions.set("freeCompilerArgs", "listOf(" + compilerArgs + ")");
kotlinOptions.set("jvmTarget", "\"" + settings.getJvmTarget() + "\"");
kotlinOptions.attribute("freeCompilerArgs", "listOf(" + compilerArgs + ")");
kotlinOptions.attribute("jvmTarget", "\"" + settings.getJvmTarget() + "\"");
});
}

View File

@@ -17,7 +17,7 @@
package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.GradleTask;
import io.spring.initializr.generator.spring.build.BuildCustomizer;
/**
@@ -41,10 +41,10 @@ abstract class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuil
build.plugins().add("org.jetbrains.kotlin.jvm", (plugin) -> plugin.setVersion(this.settings.getVersion()));
build.plugins().add("org.jetbrains.kotlin.plugin.spring",
(plugin) -> plugin.setVersion(this.settings.getVersion()));
build.customizeTasksWithType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
build.tasks().customizeWithType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
(compile) -> customizeKotlinOptions(this.settings, compile));
}
protected abstract void customizeKotlinOptions(KotlinProjectSettings settings, TaskCustomization compile);
protected abstract void customizeKotlinOptions(KotlinProjectSettings settings, GradleTask.Builder compile);
}

View File

@@ -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;
@@ -36,9 +35,10 @@ class GradleAnnotationProcessorScopeBuildCustomizerTests {
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("ap", "com.example", "model-generator", DependencyScope.ANNOTATION_PROCESSOR);
customize(build);
assertThat(build.getConfigurationCustomizations()).containsOnlyKeys("compileOnly");
ConfigurationCustomization compileOnly = build.getConfigurationCustomizations().get("compileOnly");
assertThat(compileOnly.getExtendsFrom()).containsOnly("annotationProcessor");
assertThat(build.configurations().customizations()).hasOnlyOneElementSatisfying((configuration) -> {
assertThat(configuration.getName()).isEqualTo("compileOnly");
assertThat(configuration.getExtendsFrom()).containsOnly("annotationProcessor");
});
}
@Test
@@ -47,7 +47,7 @@ class GradleAnnotationProcessorScopeBuildCustomizerTests {
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("another", "com.example", "another", DependencyScope.RUNTIME);
customize(build);
assertThat(build.getConfigurationCustomizations()).isEmpty();
assertThat(build.configurations().isEmpty()).isTrue();
}
private void customize(GradleBuild build) {

View File

@@ -35,7 +35,7 @@ class GradleConfigurationBuildCustomizerTests {
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("servlet", "javax.servlet", "servlet-api", DependencyScope.PROVIDED_RUNTIME);
customize(build);
assertThat(build.getConfigurations()).containsOnly("providedRuntime");
assertThat(build.configurations().names()).containsOnly("providedRuntime");
}
@Test
@@ -45,7 +45,7 @@ class GradleConfigurationBuildCustomizerTests {
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("servlet", "javax.servlet", "servlet-api", DependencyScope.PROVIDED_RUNTIME);
customize(build);
assertThat(build.getConfigurationCustomizations()).isEmpty();
assertThat(build.configurations().customizations()).isEmpty();
}
@Test
@@ -54,7 +54,7 @@ class GradleConfigurationBuildCustomizerTests {
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("another", "com.example", "another", DependencyScope.RUNTIME);
customize(build);
assertThat(build.getConfigurationCustomizations()).isEmpty();
assertThat(build.configurations().customizations()).isEmpty();
}
private void customize(GradleBuild build) {

View File

@@ -17,7 +17,7 @@
package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.GradleTask;
import org.assertj.core.groups.Tuple;
import org.junit.jupiter.api.Test;
@@ -44,21 +44,22 @@ class GroovyDslKotlinGradleBuildCustomizerTests {
void kotlinCompilationTasksAreCustomized() {
GradleBuild build = new GradleBuild();
new GroovyDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getImportedTypes()).contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
assertThat(build.tasks().importedTypes()).contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
assertThat(build.tasks().values()).hasOnlyOneElementSatisfying((task) -> {
assertThat(task.getName()).isEqualTo("KotlinCompile");
assertKotlinOptions(task);
});
}
private void assertKotlinOptions(TaskCustomization compileTask) {
assertThat(compileTask.getAssignments()).isEmpty();
private void assertKotlinOptions(GradleTask compileTask) {
assertThat(compileTask.getAttributes()).isEmpty();
assertThat(compileTask.getInvocations()).isEmpty();
assertThat(compileTask.getNested()).hasSize(1);
TaskCustomization kotlinOptions = compileTask.getNested().get("kotlinOptions");
GradleTask kotlinOptions = compileTask.getNested().get("kotlinOptions");
assertThat(kotlinOptions.getInvocations()).hasSize(0);
assertThat(kotlinOptions.getNested()).hasSize(0);
assertThat(kotlinOptions.getAssignments()).hasSize(2);
assertThat(kotlinOptions.getAssignments()).containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
assertThat(kotlinOptions.getAttributes()).hasSize(2);
assertThat(kotlinOptions.getAttributes()).containsEntry("freeCompilerArgs", "['-Xjsr305=strict']")
.containsEntry("jvmTarget", "'1.8'");
}

View File

@@ -17,7 +17,7 @@
package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.GradleTask;
import org.assertj.core.groups.Tuple;
import org.junit.jupiter.api.Test;
@@ -43,21 +43,22 @@ class KotlinDslKotlinGradleBuildCustomizerTests {
void kotlinCompilationTasksAreCustomized() {
GradleBuild build = new GradleBuild();
new KotlinDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getImportedTypes()).contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
assertThat(build.getTasksWithTypeCustomizations()).hasSize(1);
assertThat(build.getTasksWithTypeCustomizations()).containsKeys("KotlinCompile");
assertKotlinOptions(build.getTasksWithTypeCustomizations().get("KotlinCompile"));
assertThat(build.tasks().importedTypes()).contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile");
assertThat(build.tasks().values()).hasOnlyOneElementSatisfying((task) -> {
assertThat(task.getName()).isEqualTo("KotlinCompile");
assertKotlinOptions(task);
});
}
private void assertKotlinOptions(TaskCustomization compileTask) {
assertThat(compileTask.getAssignments()).isEmpty();
private void assertKotlinOptions(GradleTask compileTask) {
assertThat(compileTask.getAttributes()).isEmpty();
assertThat(compileTask.getInvocations()).isEmpty();
assertThat(compileTask.getNested()).hasSize(1);
TaskCustomization kotlinOptions = compileTask.getNested().get("kotlinOptions");
GradleTask kotlinOptions = compileTask.getNested().get("kotlinOptions");
assertThat(kotlinOptions.getInvocations()).hasSize(0);
assertThat(kotlinOptions.getNested()).hasSize(0);
assertThat(kotlinOptions.getAssignments()).hasSize(2);
assertThat(kotlinOptions.getAssignments()).containsEntry("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")")
assertThat(kotlinOptions.getAttributes()).hasSize(2);
assertThat(kotlinOptions.getAttributes()).containsEntry("freeCompilerArgs", "listOf(\"-Xjsr305=strict\")")
.containsEntry("jvmTarget", "\"1.8\"");
}