Move general build settings to immutable class

This commit moves the global build settings to an immutable
BuildSettings abstraction.

See gh-996
This commit is contained in:
Stephane Nicoll
2019-08-30 14:17:59 +02:00
parent 7d47786a8b
commit 3f6c98173b
30 changed files with 473 additions and 240 deletions

View File

@@ -38,9 +38,8 @@ public class SimpleBuildCustomizer implements BuildCustomizer<Build> {
@Override
public void customize(Build build) {
build.setGroup(this.description.getGroupId());
build.setArtifact(this.description.getArtifactId());
build.setVersion(this.description.getVersion());
build.settings().group(this.description.getGroupId()).artifact(this.description.getArtifactId())
.version(this.description.getVersion());
this.description.getRequestedDependencies()
.forEach((id, dependency) -> build.dependencies().add(id, dependency));
}

View File

@@ -42,7 +42,7 @@ class Gradle3SettingsGradleProjectContributor implements ProjectContributor {
public void contribute(Path projectRoot) throws IOException {
Path file = Files.createFile(projectRoot.resolve("settings.gradle"));
try (PrintWriter writer = new PrintWriter(Files.newOutputStream(file))) {
writer.println("rootProject.name = '" + this.build.getArtifact() + "'");
writer.println("rootProject.name = '" + this.build.getSettings().getArtifact() + "'");
}
}

View File

@@ -79,7 +79,7 @@ public class GradleProjectGenerationConfiguration {
@Bean
public BuildCustomizer<GradleBuild> defaultGradleBuildCustomizer(ProjectDescription description) {
return (build) -> build.setSourceCompatibility(description.getLanguage().jvmVersion());
return (build) -> build.settings().sourceCompatibility(description.getLanguage().jvmVersion());
}
@Bean

View File

@@ -43,8 +43,7 @@ public class DefaultMavenBuildCustomizer implements BuildCustomizer<MavenBuild>
@Override
public void customize(MavenBuild build) {
build.setName(this.description.getName());
build.setDescription(this.description.getDescription());
build.settings().name(this.description.getName()).description(this.description.getDescription());
build.setProperty("java.version", this.description.getLanguage().jvmVersion());
build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin");
@@ -64,7 +63,7 @@ public class DefaultMavenBuildCustomizer implements BuildCustomizer<MavenBuild>
build.setProperty("project.build.sourceEncoding", "UTF-8");
build.setProperty("project.reporting.outputEncoding", "UTF-8");
}
build.parent(parentPom.getGroupId(), parentPom.getArtifactId(), parentPom.getVersion());
build.settings().parent(parentPom.getGroupId(), parentPom.getArtifactId(), parentPom.getVersion());
}
private boolean hasBom(MavenBuild build, BillOfMaterials bom) {

View File

@@ -72,7 +72,7 @@ public class MavenProjectGenerationConfiguration {
@Bean
@ConditionalOnPackaging(WarPackaging.ID)
public BuildCustomizer<MavenBuild> mavenWarPackagingConfigurer() {
return (build) -> build.setPackaging("war");
return (build) -> build.settings().packaging("war");
}
}

View File

@@ -39,8 +39,8 @@ class KotlinMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {
@Override
public void customize(MavenBuild build) {
build.setProperty("kotlin.version", this.settings.getVersion());
build.setSourceDirectory("${project.basedir}/src/main/kotlin");
build.setTestSourceDirectory("${project.basedir}/src/test/kotlin");
build.settings().sourceDirectory("${project.basedir}/src/main/kotlin")
.testSourceDirectory("${project.basedir}/src/test/kotlin");
build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin", (kotlinMavenPlugin) -> {
kotlinMavenPlugin.configuration((configuration) -> {
configuration.configure("args",

View File

@@ -36,8 +36,8 @@ class KotlinMavenFullBuildCustomizer implements BuildCustomizer<MavenBuild> {
@Override
public void customize(MavenBuild build) {
build.setProperty("kotlin.version", this.settings.getVersion());
build.setSourceDirectory("${project.basedir}/src/main/kotlin");
build.setTestSourceDirectory("${project.basedir}/src/test/kotlin");
build.settings().sourceDirectory("${project.basedir}/src/main/kotlin")
.testSourceDirectory("${project.basedir}/src/test/kotlin");
build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin", (kotlinMavenPlugin) -> {
kotlinMavenPlugin.setVersion("${kotlin.version}");
kotlinMavenPlugin.configuration((configuration) -> {

View File

@@ -40,8 +40,8 @@ class SimpleBuildCustomizerTests {
description.setGroupId("com.example.acme");
description.setArtifactId("my-test-project");
MavenBuild build = customizeBuild(description);
assertThat(build.getGroup()).isEqualTo("com.example.acme");
assertThat(build.getArtifact()).isEqualTo("my-test-project");
assertThat(build.getSettings().getGroup()).isEqualTo("com.example.acme");
assertThat(build.getSettings().getArtifact()).isEqualTo("my-test-project");
}
@Test
@@ -49,7 +49,7 @@ class SimpleBuildCustomizerTests {
MutableProjectDescription description = initializeDescription();
description.setVersion("1.5.6.RELEASE");
MavenBuild build = customizeBuild(description);
assertThat(build.getVersion()).isEqualTo("1.5.6.RELEASE");
assertThat(build.getSettings().getVersion()).isEqualTo("1.5.6.RELEASE");
}
@Test

View File

@@ -53,8 +53,7 @@ class GradleBuildProjectContributorTests {
@Test
void groovyDslGradleBuildIsContributedToProject() throws IOException {
GradleBuild build = new GradleBuild();
build.setGroup("com.example");
build.setVersion("1.0.0-SNAPSHOT");
build.settings().group("com.example").version("1.0.0-SNAPSHOT");
build.buildscript((buildscript) -> buildscript.ext("someVersion", "'1.2.3'"));
List<String> lines = generateBuild(
groovyDslGradleBuildProjectContributor(build, IndentingWriterFactory.withDefaultSettings()));
@@ -84,8 +83,7 @@ class GradleBuildProjectContributorTests {
@Test
void kotlinDslGradleBuildIsContributedToProject() throws IOException {
GradleBuild build = new GradleBuild();
build.setGroup("com.example");
build.setVersion("1.0.0-SNAPSHOT");
build.settings().group("com.example").version("1.0.0-SNAPSHOT");
List<String> lines = generateBuild(
kotlinDslGradleBuildProjectContributor(build, IndentingWriterFactory.withDefaultSettings()));
assertThat(lines).containsSequence("group = \"com.example\"", "version = \"1.0.0-SNAPSHOT\"");

View File

@@ -44,8 +44,8 @@ class DefaultMavenBuildCustomizerTests {
description.setName("my-demo");
description.setDescription("Demonstration project");
MavenBuild build = customizeBuild(metadata, description);
assertThat(build.getName()).isEqualTo("my-demo");
assertThat(build.getDescription()).isEqualTo("Demonstration project");
assertThat(build.getSettings().getName()).isEqualTo("my-demo");
assertThat(build.getSettings().getDescription()).isEqualTo("Demonstration project");
}
@Test
@@ -72,7 +72,7 @@ class DefaultMavenBuildCustomizerTests {
void customizeWhenNoParentShouldUseSpringBootParent() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults().build();
MavenBuild build = customizeBuild(metadata);
MavenParent parent = build.getParent();
MavenParent parent = build.getSettings().getParent();
assertThat(parent.getGroupId()).isEqualTo("org.springframework.boot");
assertThat(parent.getArtifactId()).isEqualTo("spring-boot-starter-parent");
assertThat(parent.getVersion()).isEqualTo("2.0.0");
@@ -83,7 +83,7 @@ class DefaultMavenBuildCustomizerTests {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.setMavenParent("com.foo", "foo-parent", "1.0.0-SNAPSHOT", true).build();
MavenBuild build = customizeBuild(metadata);
MavenParent parent = build.getParent();
MavenParent parent = build.getSettings().getParent();
assertThat(parent.getGroupId()).isEqualTo("com.foo");
assertThat(parent.getArtifactId()).isEqualTo("foo-parent");
assertThat(parent.getVersion()).isEqualTo("1.0.0-SNAPSHOT");

View File

@@ -49,9 +49,8 @@ class MavenBuildProjectContributorTests {
@Test
void pomIsContributedToProject() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.parent("org.springframework.boot", "spring-boot-starter-parent", "2.1.0.RELEASE");
build.settings().coordinates("com.example.demo", "demo").parent("org.springframework.boot",
"spring-boot-starter-parent", "2.1.0.RELEASE");
List<String> lines = generatePom(build);
assertThat(lines).containsSequence(" <parent>", " <groupId>org.springframework.boot</groupId>",
" <artifactId>spring-boot-starter-parent</artifactId>",
@@ -63,9 +62,8 @@ class MavenBuildProjectContributorTests {
IndentingWriterFactory indentingWriterFactory = IndentingWriterFactory.create(new SimpleIndentStrategy(" "),
(factory) -> factory.indentingStrategy("maven", new SimpleIndentStrategy("\t")));
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.parent("org.springframework.boot", "spring-boot-starter-parent", "2.1.0.RELEASE");
build.settings().coordinates("com.example.demo", "demo").parent("org.springframework.boot",
"spring-boot-starter-parent", "2.1.0.RELEASE");
List<String> lines = generatePom(build, indentingWriterFactory);
assertThat(lines).containsSequence("\t<parent>", "\t\t<groupId>org.springframework.boot</groupId>",
"\t\t<artifactId>spring-boot-starter-parent</artifactId>", "\t\t<version>2.1.0.RELEASE</version>");

View File

@@ -46,8 +46,8 @@ class KotlinMavenBuildCustomizerTests {
void buildSourceDirectoriesAreConfigured() {
MavenBuild build = new MavenBuild();
new KotlinMavenBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getSourceDirectory()).isEqualTo("${project.basedir}/src/main/kotlin");
assertThat(build.getTestSourceDirectory()).isEqualTo("${project.basedir}/src/test/kotlin");
assertThat(build.getSettings().getSourceDirectory()).isEqualTo("${project.basedir}/src/main/kotlin");
assertThat(build.getSettings().getTestSourceDirectory()).isEqualTo("${project.basedir}/src/test/kotlin");
}
@Test

View File

@@ -44,8 +44,8 @@ class KotlinMavenFullBuildCustomizerTests {
void buildSourceDirectoriesAreConfigured() {
MavenBuild build = new MavenBuild();
new KotlinMavenFullBuildCustomizer(new SimpleKotlinProjectSettings("1.2.70")).customize(build);
assertThat(build.getSourceDirectory()).isEqualTo("${project.basedir}/src/main/kotlin");
assertThat(build.getTestSourceDirectory()).isEqualTo("${project.basedir}/src/test/kotlin");
assertThat(build.getSettings().getSourceDirectory()).isEqualTo("${project.basedir}/src/main/kotlin");
assertThat(build.getSettings().getTestSourceDirectory()).isEqualTo("${project.basedir}/src/test/kotlin");
}
@Test