Add support for removing build plugins

See gh-978
This commit is contained in:
HaiTao Zhang
2019-08-07 17:43:25 -07:00
committed by Stephane Nicoll
parent f33a661074
commit 083213c904
38 changed files with 717 additions and 310 deletions

View File

@@ -33,7 +33,7 @@ public class GradleConfigurationBuildCustomizer implements BuildCustomizer<Gradl
public void customize(GradleBuild build) { public void customize(GradleBuild build) {
boolean providedRuntimeUsed = build.dependencies().items() boolean providedRuntimeUsed = build.dependencies().items()
.anyMatch((dependency) -> DependencyScope.PROVIDED_RUNTIME.equals(dependency.getScope())); .anyMatch((dependency) -> DependencyScope.PROVIDED_RUNTIME.equals(dependency.getScope()));
boolean war = build.getPlugins().stream().anyMatch((plugin) -> plugin.getId().equals("war")); boolean war = build.plugins().values().anyMatch((plugin) -> plugin.getId().equals("war"));
if (providedRuntimeUsed && !war) { if (providedRuntimeUsed && !war) {
build.addConfiguration("providedRuntime"); build.addConfiguration("providedRuntime");
} }

View File

@@ -90,20 +90,20 @@ public class GradleProjectGenerationConfiguration {
@Bean @Bean
@ConditionalOnLanguage(JavaLanguage.ID) @ConditionalOnLanguage(JavaLanguage.ID)
public BuildCustomizer<GradleBuild> javaPluginContributor() { public BuildCustomizer<GradleBuild> javaPluginContributor() {
return (build) -> build.addPlugin("java"); return (build) -> build.plugins().add("java");
} }
@Bean @Bean
@ConditionalOnPackaging(WarPackaging.ID) @ConditionalOnPackaging(WarPackaging.ID)
public BuildCustomizer<GradleBuild> warPluginContributor() { public BuildCustomizer<GradleBuild> warPluginContributor() {
return (build) -> build.addPlugin("war"); return (build) -> build.plugins().add("war");
} }
@Bean @Bean
@ConditionalOnPlatformVersion("2.0.0.M1") @ConditionalOnPlatformVersion("2.0.0.M1")
@ConditionalOnBuildSystem(id = GradleBuildSystem.ID, dialect = GradleBuildSystem.DIALECT_GROOVY) @ConditionalOnBuildSystem(id = GradleBuildSystem.ID, dialect = GradleBuildSystem.DIALECT_GROOVY)
public BuildCustomizer<GradleBuild> applyDependencyManagementPluginContributor() { public BuildCustomizer<GradleBuild> applyDependencyManagementPluginContributor() {
return (build) -> build.applyPlugin("io.spring.dependency-management"); return (build) -> build.plugins().apply("io.spring.dependency-management");
} }
@Bean @Bean
@@ -149,7 +149,7 @@ public class GradleProjectGenerationConfiguration {
build.buildscript( build.buildscript(
(buildscript) -> buildscript.dependency("org.springframework.boot:spring-boot-gradle-plugin:" (buildscript) -> buildscript.dependency("org.springframework.boot:spring-boot-gradle-plugin:"
+ projectDescription.getPlatformVersion())); + projectDescription.getPlatformVersion()));
build.applyPlugin("org.springframework.boot"); build.plugins().apply("org.springframework.boot");
}; };
} }
@@ -206,8 +206,8 @@ public class GradleProjectGenerationConfiguration {
@Bean @Bean
BuildCustomizer<GradleBuild> springBootPluginContributor(ResolvedProjectDescription projectDescription) { BuildCustomizer<GradleBuild> springBootPluginContributor(ResolvedProjectDescription projectDescription) {
return (build) -> build.addPlugin("org.springframework.boot", return (build) -> build.plugins().add("org.springframework.boot",
projectDescription.getPlatformVersion().toString()); (plugin) -> plugin.setVersion(projectDescription.getPlatformVersion().toString()));
} }
@Bean @Bean
@@ -247,9 +247,10 @@ public class GradleProjectGenerationConfiguration {
BuildCustomizer<GradleBuild> springBootPluginContributor(ResolvedProjectDescription projectDescription, BuildCustomizer<GradleBuild> springBootPluginContributor(ResolvedProjectDescription projectDescription,
InitializrMetadata metadata) { InitializrMetadata metadata) {
return (build) -> { return (build) -> {
build.addPlugin("org.springframework.boot", projectDescription.getPlatformVersion().toString()); build.plugins().add("org.springframework.boot",
build.addPlugin("io.spring.dependency-management", (plugin) -> plugin.setVersion(projectDescription.getPlatformVersion().toString()));
metadata.getConfiguration().getEnv().getGradle().getDependencyManagementPluginVersion()); build.plugins().add("io.spring.dependency-management", (plugin) -> plugin.setVersion(
metadata.getConfiguration().getEnv().getGradle().getDependencyManagementPluginVersion()));
}; };
} }

View File

@@ -46,7 +46,7 @@ public class DefaultMavenBuildCustomizer implements BuildCustomizer<MavenBuild>
build.setName(this.projectDescription.getName()); build.setName(this.projectDescription.getName());
build.setDescription(this.projectDescription.getDescription()); build.setDescription(this.projectDescription.getDescription());
build.setProperty("java.version", this.projectDescription.getLanguage().jvmVersion()); build.setProperty("java.version", this.projectDescription.getLanguage().jvmVersion());
build.plugin("org.springframework.boot", "spring-boot-maven-plugin"); build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin");
Maven maven = this.metadata.getConfiguration().getEnv().getMaven(); Maven maven = this.metadata.getConfiguration().getEnv().getMaven();
String springBootVersion = this.projectDescription.getPlatformVersion().toString(); String springBootVersion = this.projectDescription.getPlatformVersion().toString();

View File

@@ -28,7 +28,7 @@ class GroovyGradleBuildCustomizer implements BuildCustomizer<GradleBuild> {
@Override @Override
public void customize(GradleBuild build) { public void customize(GradleBuild build) {
build.addPlugin("groovy"); build.plugins().add("groovy");
} }
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.groovy; package io.spring.initializr.generator.spring.code.groovy;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.spring.build.BuildCustomizer; import io.spring.initializr.generator.spring.build.BuildCustomizer;
/** /**
@@ -29,11 +28,13 @@ class GroovyMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {
@Override @Override
public void customize(MavenBuild build) { public void customize(MavenBuild build) {
MavenPlugin groovyMavenPlugin = build.plugin("org.codehaus.gmavenplus", "gmavenplus-plugin", "1.6.3"); build.plugins().add("org.codehaus.gmavenplus", "gmavenplus-plugin", (groovyMavenPlugin) -> {
groovyMavenPlugin.setVersion("1.6.3");
groovyMavenPlugin.execution(null, groovyMavenPlugin.execution(null,
(execution) -> execution.goal("addSources").goal("addTestSources").goal("generateStubs").goal("compile") (execution) -> execution.goal("addSources").goal("addTestSources").goal("generateStubs")
.goal("generateTestStubs").goal("compileTests").goal("removeStubs").goal("removeTestStubs")); .goal("compile").goal("generateTestStubs").goal("compileTests").goal("removeStubs")
.goal("removeTestStubs"));
});
} }
} }

View File

@@ -38,8 +38,9 @@ abstract class KotlinGradleBuildCustomizer implements BuildCustomizer<GradleBuil
@Override @Override
public void customize(GradleBuild build) { public void customize(GradleBuild build) {
build.addPlugin("org.jetbrains.kotlin.jvm", this.settings.getVersion()); build.plugins().add("org.jetbrains.kotlin.jvm", (plugin) -> plugin.setVersion(this.settings.getVersion()));
build.addPlugin("org.jetbrains.kotlin.plugin.spring", 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.customizeTasksWithType("org.jetbrains.kotlin.gradle.tasks.KotlinCompile",
(compile) -> customizeKotlinOptions(this.settings, compile)); (compile) -> customizeKotlinOptions(this.settings, compile));
} }

View File

@@ -42,7 +42,8 @@ public class KotlinJpaGradleBuildCustomizer implements BuildCustomizer<GradleBui
@Override @Override
public void customize(GradleBuild build) { public void customize(GradleBuild build) {
if (this.buildMetadataResolver.hasFacet(build, "jpa")) { if (this.buildMetadataResolver.hasFacet(build, "jpa")) {
build.addPlugin("org.jetbrains.kotlin.plugin.jpa", this.settings.getVersion()); build.plugins().add("org.jetbrains.kotlin.plugin.jpa",
(plugin) -> plugin.setVersion(this.settings.getVersion()));
} }
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.spring.build.BuildCustomizer; import io.spring.initializr.generator.spring.build.BuildCustomizer;
import io.spring.initializr.generator.spring.build.BuildMetadataResolver; import io.spring.initializr.generator.spring.build.BuildMetadataResolver;
import io.spring.initializr.metadata.InitializrMetadata; import io.spring.initializr.metadata.InitializrMetadata;
@@ -40,10 +39,11 @@ public class KotlinJpaMavenBuildCustomizer implements BuildCustomizer<MavenBuild
@Override @Override
public void customize(MavenBuild build) { public void customize(MavenBuild build) {
if (this.buildMetadataResolver.hasFacet(build, "jpa")) { if (this.buildMetadataResolver.hasFacet(build, "jpa")) {
MavenPlugin kotlinPlugin = build.plugin("org.jetbrains.kotlin", "kotlin-maven-plugin"); build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin", (kotlinPlugin) -> {
kotlinPlugin.configuration((configuration) -> configuration.configure("compilerPlugins", kotlinPlugin.configuration((configuration) -> configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "jpa"))); (compilerPlugins) -> compilerPlugins.add("plugin", "jpa")));
kotlinPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-noarg", "${kotlin.version}"); kotlinPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-noarg", "${kotlin.version}");
});
} }
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.spring.build.BuildCustomizer; import io.spring.initializr.generator.spring.build.BuildCustomizer;
/** /**
@@ -42,13 +41,15 @@ class KotlinMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {
build.setProperty("kotlin.version", this.settings.getVersion()); build.setProperty("kotlin.version", this.settings.getVersion());
build.setSourceDirectory("${project.basedir}/src/main/kotlin"); build.setSourceDirectory("${project.basedir}/src/main/kotlin");
build.setTestSourceDirectory("${project.basedir}/src/test/kotlin"); build.setTestSourceDirectory("${project.basedir}/src/test/kotlin");
MavenPlugin kotlinMavenPlugin = build.plugin("org.jetbrains.kotlin", "kotlin-maven-plugin"); build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin", (kotlinMavenPlugin) -> {
kotlinMavenPlugin.configuration((configuration) -> { kotlinMavenPlugin.configuration((configuration) -> {
configuration.configure("args", configuration.configure("args",
(args) -> this.settings.getCompilerArgs().forEach((arg) -> args.add("arg", arg))); (args) -> this.settings.getCompilerArgs().forEach((arg) -> args.add("arg", arg)));
configuration.configure("compilerPlugins", (compilerPlugins) -> compilerPlugins.add("plugin", "spring")); configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "spring"));
}); });
kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"); kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}");
});
} }
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.spring.build.BuildCustomizer; import io.spring.initializr.generator.spring.build.BuildCustomizer;
/** /**
@@ -39,17 +38,21 @@ class KotlinMavenFullBuildCustomizer implements BuildCustomizer<MavenBuild> {
build.setProperty("kotlin.version", this.settings.getVersion()); build.setProperty("kotlin.version", this.settings.getVersion());
build.setSourceDirectory("${project.basedir}/src/main/kotlin"); build.setSourceDirectory("${project.basedir}/src/main/kotlin");
build.setTestSourceDirectory("${project.basedir}/src/test/kotlin"); build.setTestSourceDirectory("${project.basedir}/src/test/kotlin");
MavenPlugin kotlinMavenPlugin = build.plugin("org.jetbrains.kotlin", "kotlin-maven-plugin", build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin", (kotlinMavenPlugin) -> {
"${kotlin.version}"); kotlinMavenPlugin.setVersion("${kotlin.version}");
kotlinMavenPlugin.configuration((configuration) -> { kotlinMavenPlugin.configuration((configuration) -> {
configuration.configure("args", configuration.configure("args",
(args) -> this.settings.getCompilerArgs().forEach((arg) -> args.add("arg", arg))); (args) -> this.settings.getCompilerArgs().forEach((arg) -> args.add("arg", arg)));
configuration.configure("compilerPlugins", (compilerPlugins) -> compilerPlugins.add("plugin", "spring")); configuration.configure("compilerPlugins",
(compilerPlugins) -> compilerPlugins.add("plugin", "spring"));
configuration.add("jvmTarget", this.settings.getJvmTarget()); configuration.add("jvmTarget", this.settings.getJvmTarget());
}); });
kotlinMavenPlugin.execution("compile", (compile) -> compile.phase("compile").goal("compile")); kotlinMavenPlugin.execution("compile", (compile) -> compile.phase("compile").goal("compile"));
kotlinMavenPlugin.execution("test-compile", (compile) -> compile.phase("test-compile").goal("test-compile")); kotlinMavenPlugin.execution("test-compile",
(compile) -> compile.phase("test-compile").goal("test-compile"));
kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"); kotlinMavenPlugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}");
});
} }
} }

View File

@@ -96,7 +96,7 @@ class GradleBuildProjectContributorTests {
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory.create(new SimpleIndentStrategy(" "), IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory.create(new SimpleIndentStrategy(" "),
(factory) -> factory.indentingStrategy("gradle", new SimpleIndentStrategy(" "))); (factory) -> factory.indentingStrategy("gradle", new SimpleIndentStrategy(" ")));
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("java"); build.plugins().add("java");
List<String> lines = generateBuild(kotlinDslGradleBuildProjectContributor(build, indentingWriterFactory)); List<String> lines = generateBuild(kotlinDslGradleBuildProjectContributor(build, indentingWriterFactory));
assertThat(lines).containsSequence("plugins {", " java", "}"); assertThat(lines).containsSequence("plugins {", " java", "}");
} }

View File

@@ -41,7 +41,7 @@ class GradleConfigurationBuildCustomizerTests {
@Test @Test
void providedRuntimeConfigurationIsNotAddedWithWarProject() { void providedRuntimeConfigurationIsNotAddedWithWarProject() {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("war"); build.plugins().add("war");
build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE); build.dependencies().add("lib", "com.example", "lib", DependencyScope.COMPILE);
build.dependencies().add("servlet", "javax.servlet", "servlet-api", DependencyScope.PROVIDED_RUNTIME); build.dependencies().add("servlet", "javax.servlet", "servlet-api", DependencyScope.PROVIDED_RUNTIME);
customize(build); customize(build);

View File

@@ -19,7 +19,6 @@ package io.spring.initializr.generator.spring.build.maven;
import io.spring.initializr.generator.buildsystem.BomContainer; import io.spring.initializr.generator.buildsystem.BomContainer;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenParent; import io.spring.initializr.generator.buildsystem.maven.MavenParent;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.language.java.JavaLanguage; import io.spring.initializr.generator.language.java.JavaLanguage;
import io.spring.initializr.generator.project.ProjectDescription; import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ResolvedProjectDescription; import io.spring.initializr.generator.project.ResolvedProjectDescription;
@@ -54,11 +53,12 @@ class DefaultMavenBuildCustomizerTests {
void customizeRegisterSpringBootPlugin() { void customizeRegisterSpringBootPlugin() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build(); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build();
MavenBuild build = customizeBuild(metadata); MavenBuild build = customizeBuild(metadata);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin mavenPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((mavenPlugin) -> {
assertThat(mavenPlugin.getGroupId()).isEqualTo("org.springframework.boot"); assertThat(mavenPlugin.getGroupId()).isEqualTo("org.springframework.boot");
assertThat(mavenPlugin.getArtifactId()).isEqualTo("spring-boot-maven-plugin"); assertThat(mavenPlugin.getArtifactId()).isEqualTo("spring-boot-maven-plugin");
assertThat(mavenPlugin.getVersion()).isNull(); assertThat(mavenPlugin.getVersion()).isNull();
});
} }
@Test @Test

View File

@@ -32,8 +32,8 @@ class GroovyGradleBuildCustomizerTests {
void groovyPluginIsConfigured() { void groovyPluginIsConfigured() {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
new GroovyGradleBuildCustomizer().customize(build); new GroovyGradleBuildCustomizer().customize(build);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
assertThat(build.getPlugins().get(0).getId()).isEqualTo("groovy"); build.plugins().values().findFirst().ifPresent((plugin) -> assertThat(plugin.getId()).isEqualTo("groovy"));
} }
} }

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.groovy; package io.spring.initializr.generator.spring.code.groovy;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Execution; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Execution;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -35,8 +34,8 @@ class GroovyMavenBuildCustomizerTests {
void groovyMavenPluginIsConfigured() { void groovyMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
new GroovyMavenBuildCustomizer().customize(build); new GroovyMavenBuildCustomizer().customize(build);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin groovyPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((groovyPlugin) -> {
assertThat(groovyPlugin.getGroupId()).isEqualTo("org.codehaus.gmavenplus"); assertThat(groovyPlugin.getGroupId()).isEqualTo("org.codehaus.gmavenplus");
assertThat(groovyPlugin.getArtifactId()).isEqualTo("gmavenplus-plugin"); assertThat(groovyPlugin.getArtifactId()).isEqualTo("gmavenplus-plugin");
assertThat(groovyPlugin.getVersion()).isEqualTo("1.6.3"); assertThat(groovyPlugin.getVersion()).isEqualTo("1.6.3");
@@ -49,6 +48,7 @@ class GroovyMavenBuildCustomizerTests {
"generateTestStubs", "compileTests", "removeStubs", "removeTestStubs"); "generateTestStubs", "compileTests", "removeStubs", "removeTestStubs");
assertThat(execution.getPhase()).isNull(); assertThat(execution.getPhase()).isNull();
assertThat(execution.getConfiguration()).isNull(); assertThat(execution.getConfiguration()).isNull();
});
} }
} }

View File

@@ -16,8 +16,11 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import java.util.Collections;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild; import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization; import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.StandardGradlePlugin;
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;
@@ -34,11 +37,11 @@ class GroovyDslKotlinGradleBuildCustomizerTests {
void kotlinPluginsAreConfigured() { void kotlinPluginsAreConfigured() {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
new GroovyDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build); new GroovyDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(2); assertThat(build.plugins().values()).hasSize(2);
assertThat(build.getPlugins().get(0).getId()).isEqualTo("org.jetbrains.kotlin.jvm"); assertThat(build.plugins().values().map(
assertThat(build.getPlugins().get(0).getVersion()).isEqualTo("1.2.70"); (plugin) -> Collections.singletonMap(plugin.getId(), ((StandardGradlePlugin) plugin).getVersion())))
assertThat(build.getPlugins().get(1).getId()).isEqualTo("org.jetbrains.kotlin.plugin.spring"); .containsExactlyInAnyOrder(Collections.singletonMap("org.jetbrains.kotlin.jvm", "1.2.70"),
assertThat(build.getPlugins().get(1).getVersion()).isEqualTo("1.2.70"); Collections.singletonMap("org.jetbrains.kotlin.plugin.spring", "1.2.70"));
} }
@Test @Test

View File

@@ -16,8 +16,11 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import java.util.Collections;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild; import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization; import io.spring.initializr.generator.buildsystem.gradle.GradleBuild.TaskCustomization;
import io.spring.initializr.generator.buildsystem.gradle.StandardGradlePlugin;
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;
@@ -33,11 +36,11 @@ class KotlinDslKotlinGradleBuildCustomizerTests {
void kotlinPluginsAreConfigured() { void kotlinPluginsAreConfigured() {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
new KotlinDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build); new KotlinDslKotlinGradleBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(2); assertThat(build.plugins().values()).hasSize(2);
assertThat(build.getPlugins().get(0).getId()).isEqualTo("org.jetbrains.kotlin.jvm"); assertThat(build.plugins().values().map(
assertThat(build.getPlugins().get(0).getVersion()).isEqualTo("1.2.70"); (plugin) -> Collections.singletonMap(plugin.getId(), ((StandardGradlePlugin) plugin).getVersion())))
assertThat(build.getPlugins().get(1).getId()).isEqualTo("org.jetbrains.kotlin.plugin.spring"); .containsExactlyInAnyOrder(Collections.singletonMap("org.jetbrains.kotlin.jvm", "1.2.70"),
assertThat(build.getPlugins().get(1).getVersion()).isEqualTo("1.2.70"); Collections.singletonMap("org.jetbrains.kotlin.plugin.spring", "1.2.70"));
} }
@Test @Test

View File

@@ -19,6 +19,7 @@ package io.spring.initializr.generator.spring.code.kotlin;
import java.util.Collections; import java.util.Collections;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuild; import io.spring.initializr.generator.buildsystem.gradle.GradleBuild;
import io.spring.initializr.generator.buildsystem.gradle.StandardGradlePlugin;
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder; import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
import io.spring.initializr.generator.version.Version; import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.Dependency; import io.spring.initializr.metadata.Dependency;
@@ -40,18 +41,20 @@ class KotlinJpaGradleBuildCustomizerTests {
Dependency dependency = Dependency.withId("foo"); Dependency dependency = Dependency.withId("foo");
dependency.setFacets(Collections.singletonList("jpa")); dependency.setFacets(Collections.singletonList("jpa"));
GradleBuild build = getCustomizedBuild(dependency); GradleBuild build = getCustomizedBuild(dependency);
assertThat(build.getAppliedPlugins()).isEmpty(); assertThat(build.plugins().values().filter((plugin) -> plugin.isApply())).isEmpty();
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
assertThat(build.getPlugins().get(0).getId()).isEqualTo("org.jetbrains.kotlin.plugin.jpa"); build.plugins().values().findFirst().ifPresent((plugin) -> {
assertThat(build.getPlugins().get(0).getVersion()).isEqualTo("1.2.70"); assertThat(plugin.getId()).isEqualTo("org.jetbrains.kotlin.plugin.jpa");
assertThat(((StandardGradlePlugin) plugin).getVersion()).isEqualTo("1.2.70");
});
} }
@Test @Test
void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() { void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() {
Dependency dependency = Dependency.withId("foo"); Dependency dependency = Dependency.withId("foo");
GradleBuild build = getCustomizedBuild(dependency); GradleBuild build = getCustomizedBuild(dependency);
assertThat(build.getAppliedPlugins()).isEmpty(); assertThat(build.plugins().values().filter((plugin) -> plugin.isApply())).isEmpty();
assertThat(build.getPlugins()).isEmpty(); assertThat(build.plugins().values()).isEmpty();
} }
private GradleBuild getCustomizedBuild(Dependency dependency) { private GradleBuild getCustomizedBuild(Dependency dependency) {

View File

@@ -42,8 +42,8 @@ class KotlinJpaMavenBuildCustomizerTests {
Dependency dependency = Dependency.withId("foo"); Dependency dependency = Dependency.withId("foo");
dependency.setFacets(Collections.singletonList("jpa")); dependency.setFacets(Collections.singletonList("jpa"));
MavenBuild build = getCustomizedBuild(dependency); MavenBuild build = getCustomizedBuild(dependency);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin plugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(plugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(plugin.getArtifactId()).isEqualTo("kotlin-maven-plugin"); assertThat(plugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
MavenPlugin.Setting settings = plugin.getConfiguration().getSettings().get(0); MavenPlugin.Setting settings = plugin.getConfiguration().getSettings().get(0);
@@ -54,13 +54,14 @@ class KotlinJpaMavenBuildCustomizerTests {
assertThat(pluginDependency.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(pluginDependency.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(pluginDependency.getArtifactId()).isEqualTo("kotlin-maven-noarg"); assertThat(pluginDependency.getArtifactId()).isEqualTo("kotlin-maven-noarg");
assertThat(pluginDependency.getVersion()).isEqualTo("${kotlin.version}"); assertThat(pluginDependency.getVersion()).isEqualTo("${kotlin.version}");
});
} }
@Test @Test
void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() { void customizeWhenJpaFacetAbsentShouldNotAddKotlinJpaPlugin() {
Dependency dependency = Dependency.withId("foo"); Dependency dependency = Dependency.withId("foo");
MavenBuild build = getCustomizedBuild(dependency); MavenBuild build = getCustomizedBuild(dependency);
assertThat(build.getPlugins()).hasSize(0); assertThat(build.plugins().values()).hasSize(0);
} }
private MavenBuild getCustomizedBuild(Dependency dependency) { private MavenBuild getCustomizedBuild(Dependency dependency) {

View File

@@ -20,7 +20,6 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Dependency; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Dependency;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Setting; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Setting;
@@ -55,8 +54,8 @@ class KotlinMavenBuildCustomizerTests {
void kotlinMavenPluginIsConfigured() { void kotlinMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build); new KotlinMavenBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin kotlinPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin"); assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
assertThat(kotlinPlugin.getVersion()).isNull(); assertThat(kotlinPlugin.getVersion()).isNull();
@@ -79,13 +78,16 @@ class KotlinMavenBuildCustomizerTests {
assertThat(allOpen.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(allOpen.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(allOpen.getArtifactId()).isEqualTo("kotlin-maven-allopen"); assertThat(allOpen.getArtifactId()).isEqualTo("kotlin-maven-allopen");
assertThat(allOpen.getVersion()).isEqualTo("${kotlin.version}"); assertThat(allOpen.getVersion()).isEqualTo("${kotlin.version}");
});
} }
@Test @Test
void kotlinMavenPluginWithSeveralArgs() { void kotlinMavenPluginWithSeveralArgs() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build); new KotlinMavenBuildCustomizer(new TestKotlinProjectSettings()).customize(build);
Configuration configuration = build.getPlugins().get(0).getConfiguration(); assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
Configuration configuration = kotlinPlugin.getConfiguration();
Setting args = configuration.getSettings().get(0); Setting args = configuration.getSettings().get(0);
assertThat(args.getName()).isEqualTo("args"); assertThat(args.getName()).isEqualTo("args");
assertThat(args.getValue()).asList().hasSize(2); assertThat(args.getValue()).asList().hasSize(2);
@@ -93,6 +95,7 @@ class KotlinMavenBuildCustomizerTests {
.hasFieldOrPropertyWithValue("value", "-Done=1"); .hasFieldOrPropertyWithValue("value", "-Done=1");
assertThat(args.getValue()).asList().element(1).hasFieldOrPropertyWithValue("name", "arg") assertThat(args.getValue()).asList().element(1).hasFieldOrPropertyWithValue("name", "arg")
.hasFieldOrPropertyWithValue("value", "-Dtwo=2"); .hasFieldOrPropertyWithValue("value", "-Dtwo=2");
});
} }
private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings { private static class TestKotlinProjectSettings extends SimpleKotlinProjectSettings {

View File

@@ -17,7 +17,6 @@
package io.spring.initializr.generator.spring.code.kotlin; package io.spring.initializr.generator.spring.code.kotlin;
import io.spring.initializr.generator.buildsystem.maven.MavenBuild; import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Configuration;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Dependency; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Dependency;
import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Execution; import io.spring.initializr.generator.buildsystem.maven.MavenPlugin.Execution;
@@ -53,8 +52,8 @@ class KotlinMavenFullBuildCustomizerTests {
void kotlinMavenPluginIsConfigured() { void kotlinMavenPluginIsConfigured() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
new KotlinMavenFullBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build); new KotlinMavenFullBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin kotlinPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((kotlinPlugin) -> {
assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(kotlinPlugin.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin"); assertThat(kotlinPlugin.getArtifactId()).isEqualTo("kotlin-maven-plugin");
assertThat(kotlinPlugin.getVersion()).isEqualTo("${kotlin.version}"); assertThat(kotlinPlugin.getVersion()).isEqualTo("${kotlin.version}");
@@ -90,6 +89,7 @@ class KotlinMavenFullBuildCustomizerTests {
assertThat(allOpen.getGroupId()).isEqualTo("org.jetbrains.kotlin"); assertThat(allOpen.getGroupId()).isEqualTo("org.jetbrains.kotlin");
assertThat(allOpen.getArtifactId()).isEqualTo("kotlin-maven-allopen"); assertThat(allOpen.getArtifactId()).isEqualTo("kotlin-maven-allopen");
assertThat(allOpen.getVersion()).isEqualTo("${kotlin.version}"); assertThat(allOpen.getVersion()).isEqualTo("${kotlin.version}");
});
} }
} }

View File

@@ -46,10 +46,6 @@ public class GradleBuild extends Build {
private final Map<String, String> ext = new TreeMap<>(); private final Map<String, String> ext = new TreeMap<>();
private final List<GradlePlugin> plugins = new ArrayList<>();
private final List<String> appliedPlugins = new ArrayList<>();
private final List<String> configurations = 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<>();
@@ -62,6 +58,8 @@ public class GradleBuild extends Build {
private final Buildscript buildscript = new Buildscript(); private final Buildscript buildscript = new Buildscript();
private final GradlePluginContainer plugins = new GradlePluginContainer();
public GradleBuild(BuildItemResolver buildItemResolver) { public GradleBuild(BuildItemResolver buildItemResolver) {
super(buildItemResolver); super(buildItemResolver);
} }
@@ -87,26 +85,8 @@ public class GradleBuild extends Build {
return Collections.unmodifiableMap(this.ext); return Collections.unmodifiableMap(this.ext);
} }
public GradlePlugin addPlugin(String id) { public GradlePluginContainer plugins() {
return this.addPlugin(id, null); return this.plugins;
}
public GradlePlugin addPlugin(String id, String version) {
GradlePlugin plugin = new GradlePlugin(id, version);
this.plugins.add(plugin);
return plugin;
}
public void applyPlugin(String id) {
this.appliedPlugins.add(id);
}
public List<GradlePlugin> getPlugins() {
return Collections.unmodifiableList(this.plugins);
}
public List<String> getAppliedPlugins() {
return Collections.unmodifiableList(this.appliedPlugins);
} }
public void buildscript(Consumer<Buildscript> customizer) { public void buildscript(Consumer<Buildscript> customizer) {

View File

@@ -168,6 +168,11 @@ public abstract class GradleBuildWriter {
} }
} }
protected List<StandardGradlePlugin> extractStandardPlugin(GradleBuild build) {
return (List<StandardGradlePlugin>) (List<? extends GradlePlugin>) build.plugins().values()
.filter((plugin) -> plugin instanceof StandardGradlePlugin).collect(Collectors.toList());
}
private void writeBoms(IndentingWriter writer, GradleBuild build) { private void writeBoms(IndentingWriter writer, GradleBuild build) {
if (build.boms().isEmpty()) { if (build.boms().isEmpty()) {
return; return;

View File

@@ -25,19 +25,19 @@ public class GradlePlugin {
private final String id; private final String id;
private final String version; private boolean apply;
public GradlePlugin(String id, String version) { public GradlePlugin(String id, boolean apply) {
this.id = id; this.id = id;
this.version = version; this.apply = apply;
} }
public String getId() { public String getId() {
return this.id; return this.id;
} }
public String getVersion() { public boolean isApply() {
return this.version; return this.apply;
} }
} }

View File

@@ -0,0 +1,101 @@
/*
* Copyright 2012-2019 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.generator.buildsystem.gradle;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;
/**
* A container for {@link GradlePlugin}s.
*
* @author HaiTao Zhang
*/
public class GradlePluginContainer {
private final Map<String, GradlePlugin> plugins;
public GradlePluginContainer() {
this.plugins = new LinkedHashMap<>();
}
/**
* Specify if this container is empty.
* @return {@code true} if no {@link GradlePlugin} is added
*/
public boolean isEmpty() {
return this.plugins.isEmpty();
}
/**
* Specify if this container has a GradlePlugin with the specified id.
* @param id id associated with the {@link GradlePlugin}
* @return {@code true} if an object with the specified id is added
*/
public boolean has(String id) {
return this.plugins.containsKey(id);
}
/**
* Returns a {@link Stream} of added {@link GradlePlugin}s.
* @return a stream of {@link GradlePlugin}s
*/
public Stream<GradlePlugin> values() {
return this.plugins.values().stream();
}
/**
* Add a {@link GradlePlugin} to the Gradle's legacy apply block by specifying the id.
* @param id id associated with the {@link GradlePlugin}
*/
public void apply(String id) {
addPlugin(id, (pluginId) -> new GradlePlugin(pluginId, true));
}
/**
* Add a {@link GradlePlugin} to the Gradle's standard plugins DSL block by specifying
* the id.
* @param id id associated with the {@link GradlePlugin}
*/
public void add(String id) {
addPlugin(id, (pluginId) -> new StandardGradlePlugin(pluginId));
}
/**
* Add a {@link GradlePlugin} to the Gradle's standard plugins DSL block by specifying
* the id, along with a {@link Consumer} to customize the object.
* @param id id associated with the {@link GradlePlugin}
* @param plugin consumer to customize the {@link GradlePlugin}
*/
public void add(String id, Consumer<StandardGradlePlugin> plugin) {
GradlePlugin gradlePlugin = addPlugin(id, (pluginId) -> new StandardGradlePlugin(pluginId));
if (gradlePlugin instanceof StandardGradlePlugin) {
plugin.accept((StandardGradlePlugin) gradlePlugin);
}
}
public boolean remove(String id) {
return this.plugins.remove(id) != null;
}
private GradlePlugin addPlugin(String id, Function<String, GradlePlugin> pluginId) {
return this.plugins.computeIfAbsent(id, pluginId);
}
}

View File

@@ -19,6 +19,7 @@ package io.spring.initializr.generator.buildsystem.gradle;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.stream.Collectors;
import io.spring.initializr.generator.buildsystem.BillOfMaterials; import io.spring.initializr.generator.buildsystem.BillOfMaterials;
import io.spring.initializr.generator.buildsystem.Dependency; import io.spring.initializr.generator.buildsystem.Dependency;
@@ -68,13 +69,17 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
@Override @Override
protected void writePlugins(IndentingWriter writer, GradleBuild build) { protected void writePlugins(IndentingWriter writer, GradleBuild build) {
writeNestedCollection(writer, "plugins", build.getPlugins(), this::pluginAsString); writeNestedCollection(writer, "plugins", extractStandardPlugin(build), this::pluginAsString);
writeCollection(writer, build.getAppliedPlugins(), (plugin) -> "apply plugin: '" + plugin + "'", writeCollection(writer, extractApplyPlugins(build), (plugin) -> "apply plugin: '" + plugin.getId() + "'",
writer::println); writer::println);
writer.println(); writer.println();
} }
private String pluginAsString(GradlePlugin plugin) { private List<GradlePlugin> extractApplyPlugins(GradleBuild build) {
return build.plugins().values().filter((plugin) -> plugin.isApply()).collect(Collectors.toList());
}
private String pluginAsString(StandardGradlePlugin plugin) {
String string = "id '" + plugin.getId() + "'"; String string = "id '" + plugin.getId() + "'";
if (plugin.getVersion() != null) { if (plugin.getVersion() != null) {
string += " version '" + plugin.getVersion() + "'"; string += " version '" + plugin.getVersion() + "'";

View File

@@ -65,16 +65,19 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
@Override @Override
protected void writePlugins(IndentingWriter writer, GradleBuild build) { protected void writePlugins(IndentingWriter writer, GradleBuild build) {
writeNestedCollection(writer, "plugins", build.getPlugins(), this::pluginAsString, null); writeNestedCollection(writer, "plugins", extractStandardPlugin(build), this::pluginAsString, null);
writer.println(); writer.println();
if (checkForApplyPlugins(build)) {
if (!build.getAppliedPlugins().isEmpty()) {
throw new IllegalStateException( throw new IllegalStateException(
"build.gradle.kts scripts shouldn't apply plugins. They should use the plugins block instead."); "build.gradle.kts scripts shouldn't apply plugins. They should use the plugins block instead.");
} }
} }
private String pluginAsString(GradlePlugin plugin) { private boolean checkForApplyPlugins(GradleBuild build) {
return build.plugins().values().anyMatch((gradlePlugin) -> gradlePlugin.isApply());
}
private String pluginAsString(StandardGradlePlugin plugin) {
String result = shortPluginNotation(plugin.getId()); String result = shortPluginNotation(plugin.getId());
if (result == null) { if (result == null) {
result = "id(\"" + plugin.getId() + "\")"; result = "id(\"" + plugin.getId() + "\")";

View File

@@ -0,0 +1,35 @@
/*
* Copyright 2012-2019 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.generator.buildsystem.gradle;
public class StandardGradlePlugin extends GradlePlugin {
private String version;
public StandardGradlePlugin(String id) {
super(id, false);
}
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return this.version;
}
}

View File

@@ -16,10 +16,7 @@
package io.spring.initializr.generator.buildsystem.maven; package io.spring.initializr.generator.buildsystem.maven;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
@@ -45,7 +42,7 @@ public class MavenBuild extends Build {
private final Map<String, String> properties = new TreeMap<>(); private final Map<String, String> properties = new TreeMap<>();
private final Map<String, MavenPlugin> plugins = new LinkedHashMap<>(); private MavenPluginContainer plugins = new MavenPluginContainer();
private String packaging; private String packaging;
@@ -106,24 +103,8 @@ public class MavenBuild extends Build {
this.testSourceDirectory = testSourceDirectory; this.testSourceDirectory = testSourceDirectory;
} }
public MavenPlugin plugin(String groupId, String artifactId) { public MavenPluginContainer plugins() {
return this.plugins.computeIfAbsent(pluginKey(groupId, artifactId), return this.plugins;
(id) -> new MavenPlugin(groupId, artifactId));
}
public MavenPlugin plugin(String groupId, String artifactId, String version) {
MavenPlugin mavenPlugin = this.plugins.computeIfAbsent(pluginKey(groupId, artifactId),
(id) -> new MavenPlugin(groupId, artifactId));
mavenPlugin.setVersion(version);
return mavenPlugin;
}
private String pluginKey(String groupId, String artifactId) {
return String.format("%s:%s", groupId, artifactId);
}
public List<MavenPlugin> getPlugins() {
return Collections.unmodifiableList(new ArrayList<>(this.plugins.values()));
} }
public void setPackaging(String packaging) { public void setPackaging(String packaging) {

View File

@@ -240,8 +240,7 @@ public class MavenBuildWriter {
} }
private void writeBuild(IndentingWriter writer, MavenBuild build) { private void writeBuild(IndentingWriter writer, MavenBuild build) {
if (build.getSourceDirectory() == null && build.getTestSourceDirectory() == null if (build.getSourceDirectory() == null && build.getTestSourceDirectory() == null && build.plugins().isEmpty()) {
&& build.getPlugins().isEmpty()) {
return; return;
} }
writer.println(); writer.println();
@@ -254,10 +253,11 @@ public class MavenBuildWriter {
} }
private void writePlugins(IndentingWriter writer, MavenBuild build) { private void writePlugins(IndentingWriter writer, MavenBuild build) {
if (build.getPlugins().isEmpty()) { if (build.plugins().isEmpty()) {
return; return;
} }
writeElement(writer, "plugins", () -> writeCollection(writer, build.getPlugins(), this::writePlugin)); writeElement(writer, "plugins", () -> writeCollection(writer,
build.plugins().values().collect(Collectors.toList()), this::writePlugin));
} }
private void writePlugin(IndentingWriter writer, MavenPlugin plugin) { private void writePlugin(IndentingWriter writer, MavenPlugin plugin) {

View File

@@ -0,0 +1,105 @@
/*
* Copyright 2012-2019 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.generator.buildsystem.maven;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Stream;
/**
* A container for {@link MavenPlugin}s.
*
* @author HaiTao Zhang
*/
public class MavenPluginContainer {
private final Map<String, MavenPlugin> plugins;
public MavenPluginContainer() {
this.plugins = new LinkedHashMap<>();
}
/**
* Specify if this container is empty.
* @return {@code true} if no {@link MavenPlugin} is added
*/
public boolean isEmpty() {
return this.plugins.isEmpty();
}
/**
* Specify if this container has a MavenPlugin with the specified groupId and
* artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* @return {@code true} if an item with the specified {@code groupId} and
* {@code artifactId} is added
*/
public boolean has(String groupId, String artifactId) {
return this.plugins.containsKey(pluginKey(groupId, artifactId));
}
/**
* Returns a {@link Stream} of added {@link MavenPlugin}s.
* @return a stream of {@link MavenPlugin}s
*/
public Stream<MavenPlugin> values() {
return this.plugins.values().stream();
}
/**
* Add a {@link MavenPlugin} by specifying the groupId and artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
*/
public void add(String groupId, String artifactId) {
addPlugin(groupId, artifactId);
}
/**
* Add a {@link MavenPlugin} by specifying the groupId and artifactId, along with a
* {@link Consumer} to customize the object.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* @param plugin {@link Consumer} to customize the object
*/
public void add(String groupId, String artifactId, Consumer<MavenPlugin> plugin) {
MavenPlugin mavenPlugin = addPlugin(groupId, artifactId);
plugin.accept(mavenPlugin);
}
/**
* Remove a {@link MavenPlugin} by specifying the groupId and artifactId.
* @param groupId groupId associated with the {@link MavenPlugin}
* @param artifactId artifactId associated with the {@link MavenPlugin}
* @return {@code true} if an object was removed
*/
public boolean remove(String groupId, String artifactId) {
return this.plugins.remove(pluginKey(groupId, artifactId)) != null;
}
private String pluginKey(String groupId, String artifactId) {
return String.format("%s:%s", groupId, artifactId);
}
private MavenPlugin addPlugin(String groupId, String artifactId) {
return this.plugins.computeIfAbsent(pluginKey(groupId, artifactId),
(pluginId) -> new MavenPlugin(groupId, artifactId));
}
}

View File

@@ -0,0 +1,90 @@
/*
* Copyright 2012-2019 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.generator.buildsystem.gradle;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link GradlePluginContainer}.
*
* @author HaITao Zhang
*/
public class GradlePluginContainerTests {
@Test
void addGradlePluginWithOnlyId() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void addGradlePluginWithConsumer() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example", (plugin) -> plugin.setVersion("1.0"));
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin).isInstanceOf(StandardGradlePlugin.class);
assertThat(((StandardGradlePlugin) plugin).getVersion()).isEqualTo("1.0");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void applyGradlePlugin() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isTrue();
});
}
@Test
void applyGradlePluginShouldNotOverrideGradlePluginThatWasAlreadyAdded() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.add("com.example");
pluginContainer.apply("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isFalse();
});
}
@Test
void addGradlePluginShouldNotOverrideGradlePluginThatWasAlreadyApplied() {
GradlePluginContainer pluginContainer = new GradlePluginContainer();
pluginContainer.apply("com.example");
pluginContainer.add("com.example");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getId()).isEqualTo("com.example");
assertThat(plugin.isApply()).isTrue();
});
}
}

View File

@@ -81,7 +81,7 @@ class GroovyDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithPlugin() throws IOException { void gradleBuildWithPlugin() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("java"); build.plugins().add("java");
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " id 'java'", "}"); assertThat(lines).containsSequence("plugins {", " id 'java'", "}");
} }
@@ -89,7 +89,8 @@ class GroovyDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithPluginAndVersion() throws IOException { void gradleBuildWithPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("org.springframework.boot", "2.1.0.RELEASE"); build.plugins().add("org.springframework.boot",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("2.1.0.RELEASE"));
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " id 'org.springframework.boot' version '2.1.0.RELEASE'", assertThat(lines).containsSequence("plugins {", " id 'org.springframework.boot' version '2.1.0.RELEASE'",
"}"); "}");
@@ -98,7 +99,7 @@ class GroovyDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithApplyPlugin() throws IOException { void gradleBuildWithApplyPlugin() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.applyPlugin("io.spring.dependency-management"); build.plugins().apply("io.spring.dependency-management");
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("apply plugin: 'io.spring.dependency-management'"); assertThat(lines).containsSequence("apply plugin: 'io.spring.dependency-management'");
} }

View File

@@ -82,8 +82,8 @@ class KotlinDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithBuiltinPlugin() throws IOException { void gradleBuildWithBuiltinPlugin() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("java"); build.plugins().add("java");
build.addPlugin("war"); build.plugins().add("war");
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " java", " war", "}"); assertThat(lines).containsSequence("plugins {", " java", " war", "}");
} }
@@ -91,8 +91,10 @@ class KotlinDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithKotlinPluginAndVersion() throws IOException { void gradleBuildWithKotlinPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("org.jetbrains.kotlin.jvm", "1.3.21"); build.plugins().add("org.jetbrains.kotlin.jvm",
build.addPlugin("org.jetbrains.kotlin.plugin.spring", "1.3.21"); (StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("1.3.21"));
build.plugins().add("org.jetbrains.kotlin.plugin.spring",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("1.3.21"));
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", " kotlin(\"jvm\") version \"1.3.21\"", assertThat(lines).containsSequence("plugins {", " kotlin(\"jvm\") version \"1.3.21\"",
" kotlin(\"plugin.spring\") version \"1.3.21\"", "}"); " kotlin(\"plugin.spring\") version \"1.3.21\"", "}");
@@ -101,7 +103,8 @@ class KotlinDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithPluginAndVersion() throws IOException { void gradleBuildWithPluginAndVersion() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.addPlugin("org.springframework.boot", "2.1.0.RELEASE"); build.plugins().add("org.springframework.boot",
(StandardGradlePlugin standardGradlePlugin) -> standardGradlePlugin.setVersion("2.1.0.RELEASE"));
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("plugins {", assertThat(lines).containsSequence("plugins {",
" id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"", "}"); " id(\"org.springframework.boot\") version \"2.1.0.RELEASE\"", "}");
@@ -110,7 +113,7 @@ class KotlinDslGradleBuildWriterTests {
@Test @Test
void gradleBuildWithApplyPlugin() { void gradleBuildWithApplyPlugin() {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.applyPlugin("io.spring.dependency-management"); build.plugins().apply("io.spring.dependency-management");
assertThatIllegalStateException().isThrownBy(() -> generateBuild(build)); assertThatIllegalStateException().isThrownBy(() -> generateBuild(build));
} }

View File

@@ -31,83 +31,96 @@ class MavenBuildTests {
@Test @Test
void mavenPluginCanBeConfigured() { void mavenPluginCanBeConfigured() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin").execution("first", (first) -> first.goal("run-this")); build.plugins().add("com.example", "test-plugin",
assertThat(build.getPlugins()).hasSize(1); (plugin) -> plugin.execution("first", (first) -> first.goal("run-this")));
MavenPlugin testPlugin = build.getPlugins().get(0); assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example"); assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin"); assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isNull(); assertThat(testPlugin.getVersion()).isNull();
assertThat(testPlugin.getExecutions()).hasSize(1); assertThat(testPlugin.getExecutions()).hasSize(1);
assertThat(testPlugin.getExecutions().get(0).getId()).isEqualTo("first"); assertThat(testPlugin.getExecutions().get(0).getId()).isEqualTo("first");
assertThat(testPlugin.getExecutions().get(0).getGoals()).containsExactly("run-this"); assertThat(testPlugin.getExecutions().get(0).getGoals()).containsExactly("run-this");
});
} }
@Test @Test
void mavenPluginVersionCanBeAmended() { void mavenPluginVersionCanBeAmended() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin"); build.plugins().add("com.example", "test-plugin");
build.plugin("com.example", "test-plugin", "1.0.0"); build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin testPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example"); assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin"); assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isEqualTo("1.0.0"); assertThat(testPlugin.getVersion()).isEqualTo("1.0.0");
});
} }
@Test @Test
void mavenPluginVersionCanBeAmendedWithCustomizer() { void mavenPluginVersionCanBeAmendedWithCustomizer() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin", "1.0.0"); build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
build.plugin("com.example", "test-plugin").setVersion(null); build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion(null));
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin testPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example"); assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin"); assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isNull(); assertThat(testPlugin.getVersion()).isNull();
});
} }
@Test @Test
void mavenPluginVersionIsNotLostOnAmend() { void mavenPluginVersionIsNotLostOnAmend() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin", "1.0.0"); build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.setVersion("1.0.0"));
build.plugin("com.example", "test-plugin"); build.plugins().add("com.example", "test-plugin");
assertThat(build.getPlugins()).hasSize(1); assertThat(build.plugins().values()).hasSize(1);
MavenPlugin testPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(testPlugin.getGroupId()).isEqualTo("com.example"); assertThat(testPlugin.getGroupId()).isEqualTo("com.example");
assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin"); assertThat(testPlugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(testPlugin.getVersion()).isEqualTo("1.0.0"); assertThat(testPlugin.getVersion()).isEqualTo("1.0.0");
});
}
@Test
void mavenPluginCanBeRemoved() {
MavenBuild build = new MavenBuild();
build.plugins().add("com.example", "test-plugin");
build.plugins().remove("com.example", "test-plugin");
assertThat(build.plugins().values()).hasSize(0);
} }
@Test @Test
void mavenPluginExecutionCanBeAmended() { void mavenPluginExecutionCanBeAmended() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin").execution("first", (first) -> first.goal("run-this")); build.plugins().add("com.example", "test-plugin",
build.plugin("com.example", "test-plugin").execution("first", (first) -> first.goal("run-that")); (plugin) -> plugin.execution("first", (first) -> first.goal("run-this")));
assertThat(build.getPlugins()).hasSize(1); build.plugins().add("com.example", "test-plugin",
MavenPlugin testPlugin = build.getPlugins().get(0); (plugin) -> plugin.execution("first", (first) -> first.goal("run-that")));
assertThat(build.plugins().values()).hasSize(1);
build.plugins().values().findFirst().ifPresent((testPlugin) -> {
assertThat(testPlugin.getExecutions()).hasSize(1); assertThat(testPlugin.getExecutions()).hasSize(1);
assertThat(testPlugin.getExecutions().get(0).getId()).isEqualTo("first"); assertThat(testPlugin.getExecutions().get(0).getId()).isEqualTo("first");
assertThat(testPlugin.getExecutions().get(0).getGoals()).containsExactly("run-this", "run-that"); assertThat(testPlugin.getExecutions().get(0).getGoals()).containsExactly("run-this", "run-that");
});
} }
@Test @Test
void mavenPluginExtensionsNotLoadedByDefault() { void mavenPluginExtensionsNotLoadedByDefault() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin"); build.plugins().add("com.example", "test-plugin");
assertThat(build.plugins().values()).hasSize(1);
MavenPlugin testPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((testPlugin) -> assertThat(testPlugin.isExtensions()).isFalse());
assertThat(testPlugin.isExtensions()).isFalse();
} }
@Test @Test
void mavenPluginExtensionsCanBeLoaded() { void mavenPluginExtensionsCanBeLoaded() {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.plugin("com.example", "test-plugin").extensions(); build.plugins().add("com.example", "test-plugin", (plugin) -> plugin.extensions());
assertThat(build.plugins().values()).hasSize(1);
MavenPlugin testPlugin = build.getPlugins().get(0); build.plugins().values().findFirst().ifPresent((testPlugin) -> assertThat(testPlugin.isExtensions()).isTrue());
assertThat(testPlugin.isExtensions()).isTrue();
} }
} }

View File

@@ -350,7 +350,7 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
build.plugin("org.springframework.boot", "spring-boot-maven-plugin"); build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin");
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin"); NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("org.springframework.boot"); assertThat(plugin).textAtPath("groupId").isEqualTo("org.springframework.boot");
@@ -365,11 +365,12 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
MavenPlugin kotlin = build.plugin("org.jetbrains.kotlin", "kotlin-maven-plugin"); build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin",
kotlin.configuration((configuration) -> { (plugin) -> plugin.configuration((configuration) -> {
configuration.configure("args", (args) -> args.add("arg", "-Xjsr305=strict")); configuration.configure("args", (args) -> args.add("arg", "-Xjsr305=strict"));
configuration.configure("compilerPlugins", (compilerPlugins) -> compilerPlugins.add("plugin", "spring")); configuration.configure("compilerPlugins",
}); (compilerPlugins) -> compilerPlugins.add("plugin", "spring"));
}));
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin"); NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("org.jetbrains.kotlin"); assertThat(plugin).textAtPath("groupId").isEqualTo("org.jetbrains.kotlin");
@@ -386,8 +387,9 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
MavenPlugin asciidoctor = build.plugin("org.asciidoctor", "asciidoctor-maven-plugin", "1.5.3"); build.plugins().add("org.asciidoctor", "asciidoctor-maven-plugin", (plugin) -> {
asciidoctor.execution("generateProject-docs", (execution) -> { plugin.setVersion("1.5.3");
plugin.execution("generateProject-docs", (execution) -> {
execution.goal("process-asciidoc"); execution.goal("process-asciidoc");
execution.phase("generateProject-resources"); execution.phase("generateProject-resources");
execution.configuration((configuration) -> { execution.configuration((configuration) -> {
@@ -395,6 +397,7 @@ class MavenBuildWriterTests {
configuration.add("backend", "html"); configuration.add("backend", "html");
}); });
}); });
});
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin"); NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("org.asciidoctor"); assertThat(plugin).textAtPath("groupId").isEqualTo("org.asciidoctor");
@@ -415,8 +418,8 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
MavenPlugin kotlin = build.plugin("org.jetbrains.kotlin", "kotlin-maven-plugin"); build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin",
kotlin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"); (plugin) -> plugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"));
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin"); NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("org.jetbrains.kotlin"); assertThat(plugin).textAtPath("groupId").isEqualTo("org.jetbrains.kotlin");
@@ -433,8 +436,7 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
MavenPlugin demoPlugin = build.plugin("com.example.demo", "demo-plugin"); build.plugins().add("com.example.demo", "demo-plugin", (plugin) -> plugin.extensions());
demoPlugin.extensions();
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin"); NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
assertThat(plugin).textAtPath("groupId").isEqualTo("com.example.demo"); assertThat(plugin).textAtPath("groupId").isEqualTo("com.example.demo");

View File

@@ -0,0 +1,60 @@
/*
* Copyright 2012-2019 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.generator.buildsystem.maven;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link MavenPluginContainer}.
*
* @author HaiTao Zhang
*/
public class MavenPluginContainerTests {
@Test
void addMavenPlugin() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin");
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("com.example");
assertThat(plugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(plugin.getVersion()).isNull();
});
}
@Test
void addMavenPluginWithConsumer() {
MavenPluginContainer pluginContainer = new MavenPluginContainer();
pluginContainer.add("com.example", "test-plugin", (plugin) -> {
plugin.setVersion("1.0");
plugin.execution("first", (first) -> first.goal("run-this"));
});
assertThat(pluginContainer.values()).hasSize(1);
pluginContainer.values().findFirst().ifPresent((plugin) -> {
assertThat(plugin.getGroupId()).isEqualTo("com.example");
assertThat(plugin.getArtifactId()).isEqualTo("test-plugin");
assertThat(plugin.getVersion()).isEqualTo("1.0");
assertThat(plugin.getExecutions()).hasSize(1);
assertThat(plugin.getExecutions().get(0).getId()).isEqualTo("first");
assertThat(plugin.getExecutions().get(0).getGoals()).containsExactly("run-this");
});
}
}

View File

@@ -57,11 +57,13 @@ class MavenPluginTests {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
void configurationParameterWithNestedValuesCanBeCustomized() { void configurationParameterWithNestedValuesCanBeCustomized() {
MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin"); MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin");
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.add("item", "one"))); plugin.configuration(
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.add("item", "two"))); (configuration) -> configuration.configure("plugins", (items) -> items.add("item", "one")));
plugin.configuration(
(configuration) -> configuration.configure("plugins", (items) -> items.add("item", "two")));
assertThat(plugin.getConfiguration().getSettings()).hasSize(1); assertThat(plugin.getConfiguration().getSettings()).hasSize(1);
Setting setting = plugin.getConfiguration().getSettings().get(0); Setting setting = plugin.getConfiguration().getSettings().get(0);
assertThat(setting.getName()).isEqualTo("items"); assertThat(setting.getName()).isEqualTo("plugins");
assertThat(setting.getValue()).isInstanceOf(List.class); assertThat(setting.getValue()).isInstanceOf(List.class);
List<Setting> values = (List<Setting>) setting.getValue(); List<Setting> values = (List<Setting>) setting.getValue();
assertThat(values.stream().map(Setting::getName)).containsExactly("item", "item"); assertThat(values.stream().map(Setting::getName)).containsExactly("item", "item");
@@ -72,13 +74,13 @@ class MavenPluginTests {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
void configurationParameterWithSeveralLevelOfNestedValuesCanBeCustomized() { void configurationParameterWithSeveralLevelOfNestedValuesCanBeCustomized() {
MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin"); MavenPlugin plugin = new MavenPlugin("com.example", "test-plugin");
plugin.configuration((configuration) -> configuration.configure("items", plugin.configuration((configuration) -> configuration.configure("plugins",
(items) -> items.configure("item", (subItems) -> subItems.add("subItem", "one")))); (items) -> items.configure("item", (subItems) -> subItems.add("subItem", "one"))));
plugin.configuration((configuration) -> configuration.configure("items", (items) -> items.configure("item", plugin.configuration((configuration) -> configuration.configure("plugins", (items) -> items.configure("item",
(subItems) -> subItems.add("subItem", "two").add("subItem", "three")))); (subItems) -> subItems.add("subItem", "two").add("subItem", "three"))));
assertThat(plugin.getConfiguration().getSettings()).hasSize(1); assertThat(plugin.getConfiguration().getSettings()).hasSize(1);
Setting setting = plugin.getConfiguration().getSettings().get(0); Setting setting = plugin.getConfiguration().getSettings().get(0);
assertThat(setting.getName()).isEqualTo("items"); assertThat(setting.getName()).isEqualTo("plugins");
assertThat(setting.getValue()).isInstanceOf(List.class); assertThat(setting.getValue()).isInstanceOf(List.class);
List<Setting> items = (List<Setting>) setting.getValue(); List<Setting> items = (List<Setting>) setting.getValue();
assertThat(items).hasSize(1); assertThat(items).hasSize(1);