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

View File

@ -30,12 +30,6 @@ import io.spring.initializr.generator.version.VersionProperty;
*/
public abstract class Build {
private String group;
private String artifact;
private String version = "0.0.1-SNAPSHOT";
private final Map<VersionProperty, String> versionProperties = new TreeMap<>();
private final DependencyContainer dependencies;
@ -63,36 +57,16 @@ public abstract class Build {
}
/**
* Return the identifier of the group for the project.
* @return the groupId
* Return a builder to configure the general settings of this build.
* @return a builder for {@link BuildSettings}.
*/
public String getGroup() {
return this.group;
}
public void setGroup(String group) {
this.group = group;
}
public abstract BuildSettings.Builder<?> settings();
/**
* Return the identifier of the project.
* @return the artifactId
* Return the settings of this build.
* @return a {@link BuildSettings}
*/
public String getArtifact() {
return this.artifact;
}
public void setArtifact(String artifact) {
this.artifact = artifact;
}
public String getVersion() {
return this.version;
}
public void setVersion(String version) {
this.version = version;
}
public abstract BuildSettings getSettings();
public void addVersionProperty(VersionProperty versionProperty, String version) {
this.versionProperties.put(versionProperty, version);

View File

@ -0,0 +1,104 @@
/*
* 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;
/**
* General build settings.
*
* @author Stephane Nicoll
*/
public class BuildSettings {
private final String group;
private final String artifact;
private final String version;
protected BuildSettings(Builder<?> builder) {
this.group = builder.group;
this.artifact = builder.artifact;
this.version = builder.version;
}
/**
* Return the identifier of the group for the project.
* @return the group identifier or {@code null}
*/
public String getGroup() {
return this.group;
}
/**
* Return the identifier of the project.
* @return the project identifier or {@code null}
*/
public String getArtifact() {
return this.artifact;
}
/**
* Return the version of the project.
* @return the project version or {@code null}
*/
public String getVersion() {
return this.version;
}
/**
* Builder for build settings.
*
* @param <B> builder type
*/
public abstract static class Builder<B extends Builder> {
private String group;
private String artifact;
private String version = "0.0.1-SNAPSHOT";
protected Builder() {
}
public B group(String group) {
this.group = group;
return self();
}
public B artifact(String artifact) {
this.artifact = artifact;
return self();
}
public B version(String version) {
this.version = version;
return self();
}
@SuppressWarnings("unchecked")
protected B self() {
return (B) this;
}
public BuildSettings build() {
return new BuildSettings(this);
}
}
}

View File

@ -30,6 +30,7 @@ import java.util.function.Consumer;
import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.BuildItemResolver;
import io.spring.initializr.generator.buildsystem.gradle.GradleBuildSettings.Builder;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
@ -42,7 +43,7 @@ import org.springframework.util.StringUtils;
*/
public class GradleBuild extends Build {
private String sourceCompatibility;
private final GradleBuildSettings.Builder settings = new Builder();
private final Map<String, String> ext = new TreeMap<>();
@ -68,12 +69,14 @@ public class GradleBuild extends Build {
this(null);
}
public void setSourceCompatibility(String sourceCompatibility) {
this.sourceCompatibility = sourceCompatibility;
@Override
public GradleBuildSettings.Builder settings() {
return this.settings;
}
public String getSourceCompatibility() {
return this.sourceCompatibility;
@Override
public GradleBuildSettings getSettings() {
return this.settings.build();
}
public GradleBuild ext(String key, String value) {

View File

@ -0,0 +1,61 @@
/*
* 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 io.spring.initializr.generator.buildsystem.BuildSettings;
/**
* Gradle {@link BuildSettings}.
*
* @author Stephane Nicoll
*/
public class GradleBuildSettings extends BuildSettings {
private final String sourceCompatibility;
protected GradleBuildSettings(Builder builder) {
super(builder);
this.sourceCompatibility = builder.sourceCompatibility;
}
/**
* Return the java version compatibility to use when compiling Java source.
* @return the java version to use for source.
*/
public String getSourceCompatibility() {
return this.sourceCompatibility;
}
/**
* Builder for {@link GradleBuildSettings}.
*/
public static class Builder extends BuildSettings.Builder<Builder> {
private String sourceCompatibility;
public Builder sourceCompatibility(String sourceCompatibility) {
this.sourceCompatibility = sourceCompatibility;
return self();
}
public GradleBuildSettings build() {
return new GradleBuildSettings(this);
}
}
}

View File

@ -54,12 +54,13 @@ import io.spring.initializr.generator.version.VersionProperty;
public abstract class GradleBuildWriter {
public final void writeTo(IndentingWriter writer, GradleBuild build) throws IOException {
GradleBuildSettings settings = build.getSettings();
writeImports(writer, build);
writeBuildscript(writer, build);
writePlugins(writer, build);
writeProperty(writer, "group", build.getGroup());
writeProperty(writer, "version", build.getVersion());
writeJavaSourceCompatibility(writer, build);
writeProperty(writer, "group", settings.getGroup());
writeProperty(writer, "version", settings.getVersion());
writeJavaSourceCompatibility(writer, settings);
writer.println();
writeConfigurations(writer, build);
writeRepositories(writer, build);
@ -87,7 +88,7 @@ public abstract class GradleBuildWriter {
.map(StandardGradlePlugin.class::cast).collect(Collectors.toList());
}
protected abstract void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuild build);
protected abstract void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuildSettings settings);
protected abstract void writeConfigurations(IndentingWriter writer, GradleBuild build);

View File

@ -33,7 +33,7 @@ public abstract class GradleSettingsWriter {
public final void writeTo(IndentingWriter writer, GradleBuild build) throws IOException {
writePluginManagement(writer, build);
writer.println("rootProject.name = " + wrapWithQuotes(build.getArtifact()));
writer.println("rootProject.name = " + wrapWithQuotes(build.getSettings().getArtifact()));
}
private void writePluginManagement(IndentingWriter writer, GradleBuild build) {

View File

@ -88,8 +88,8 @@ public class GroovyDslGradleBuildWriter extends GradleBuildWriter {
}
@Override
protected void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuild build) {
writeProperty(writer, "sourceCompatibility", build.getSourceCompatibility());
protected void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuildSettings settings) {
writeProperty(writer, "sourceCompatibility", settings.getSourceCompatibility());
}
@Override

View File

@ -98,9 +98,9 @@ public class KotlinDslGradleBuildWriter extends GradleBuildWriter {
}
@Override
protected void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuild build) {
protected void writeJavaSourceCompatibility(IndentingWriter writer, GradleBuildSettings settings) {
writer.println("java.sourceCompatibility = JavaVersion."
+ sourceCompatibilitiesToJavaVersion.get(build.getSourceCompatibility()));
+ sourceCompatibilitiesToJavaVersion.get(settings.getSourceCompatibility()));
}
@Override

View File

@ -22,6 +22,7 @@ import java.util.TreeMap;
import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.BuildItemResolver;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSettings.Builder;
/**
* Maven build for a project.
@ -31,15 +32,7 @@ import io.spring.initializr.generator.buildsystem.BuildItemResolver;
*/
public class MavenBuild extends Build {
private MavenParent parent;
private String name;
private String description;
private String sourceDirectory;
private String testSourceDirectory;
private final MavenBuildSettings.Builder settings = new Builder();
private final Map<String, String> properties = new TreeMap<>();
@ -49,8 +42,6 @@ public class MavenBuild extends Build {
private MavenPluginContainer plugins = new MavenPluginContainer();
private String packaging;
public MavenBuild(BuildItemResolver buildItemResolver) {
super(buildItemResolver);
}
@ -59,29 +50,14 @@ public class MavenBuild extends Build {
this(null);
}
public MavenParent parent(String groupId, String artifactId, String version) {
this.parent = new MavenParent(groupId, artifactId, version);
return this.parent;
@Override
public MavenBuildSettings.Builder settings() {
return this.settings;
}
public MavenParent getParent() {
return this.parent;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setDescription(String description) {
this.description = description;
}
public String getDescription() {
return this.description;
@Override
public MavenBuildSettings getSettings() {
return this.settings.build();
}
public void setProperty(String key, String value) {
@ -92,22 +68,6 @@ public class MavenBuild extends Build {
return Collections.unmodifiableMap(this.properties);
}
public String getSourceDirectory() {
return this.sourceDirectory;
}
public void setSourceDirectory(String sourceDirectory) {
this.sourceDirectory = sourceDirectory;
}
public String getTestSourceDirectory() {
return this.testSourceDirectory;
}
public void setTestSourceDirectory(String testSourceDirectory) {
this.testSourceDirectory = testSourceDirectory;
}
public MavenResourceContainer resources() {
return this.resources;
}
@ -120,12 +80,4 @@ public class MavenBuild extends Build {
return this.plugins;
}
public void setPackaging(String packaging) {
this.packaging = packaging;
}
public String getPackaging() {
return this.packaging;
}
}

View File

@ -0,0 +1,165 @@
/*
* 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 io.spring.initializr.generator.buildsystem.BuildSettings;
/**
* Maven {@link BuildSettings}.
*
* @author Stephane Nicoll
*/
public class MavenBuildSettings extends BuildSettings {
private final MavenParent parent;
private final String packaging;
private final String name;
private final String description;
private final String sourceDirectory;
private final String testSourceDirectory;
protected MavenBuildSettings(Builder builder) {
super(builder);
this.parent = builder.parent;
this.packaging = builder.packaging;
this.name = builder.name;
this.description = builder.description;
this.sourceDirectory = builder.sourceDirectory;
this.testSourceDirectory = builder.testSourceDirectory;
}
/**
* Return the {@link MavenParent} to use or {@code null} if this project has no
* parent.
* @return the parent pom or {@code null}
*/
public MavenParent getParent() {
return this.parent;
}
/**
* Return the {@code packaging} to use or {@code null} to use the default {@code jar}
* packaging.
* @return the packaging to use
*/
public String getPackaging() {
return this.packaging;
}
/**
* Return a simple name for the project.
* @return the name of the project or {@code null}
*/
public String getName() {
return this.name;
}
/**
* Return a human readable description of the project.
* @return the description of the project or {@code null}
*/
public String getDescription() {
return this.description;
}
/**
* Return the location of main source code. Can use Maven properties such as
* {@code ${basedir}}.
* @return the location of main source code or {@code null} to use the default
*/
public String getSourceDirectory() {
return this.sourceDirectory;
}
/**
* Return the location of test source code. Can use Maven properties such as
* {@code ${basedir}}.
* @return the location of test source code or {@code null} to use the default
*/
public String getTestSourceDirectory() {
return this.testSourceDirectory;
}
/**
* Builder for a Maven dependency.
*
* @see MavenDependency#withCoordinates(String, String)
*/
public static class Builder extends BuildSettings.Builder<Builder> {
private MavenParent parent;
private String packaging;
private String name;
private String description;
private String sourceDirectory;
private String testSourceDirectory;
public Builder() {
}
public Builder coordinates(String groupId, String artifactId) {
return group(groupId).artifact(artifactId);
}
public Builder parent(String groupId, String artifactId, String version) {
this.parent = new MavenParent(groupId, artifactId, version);
return self();
}
public Builder packaging(String packaging) {
this.packaging = packaging;
return self();
}
public Builder name(String name) {
this.name = name;
return self();
}
public Builder description(String description) {
this.description = description;
return self();
}
public Builder sourceDirectory(String sourceDirectory) {
this.sourceDirectory = sourceDirectory;
return self();
}
public Builder testSourceDirectory(String testSourceDirectory) {
this.testSourceDirectory = testSourceDirectory;
return self();
}
@Override
public MavenBuildSettings build() {
return new MavenBuildSettings(this);
}
}
}

View File

@ -49,11 +49,12 @@ import io.spring.initializr.generator.version.VersionReference;
public class MavenBuildWriter {
public void writeTo(IndentingWriter writer, MavenBuild build) throws IOException {
MavenBuildSettings settings = build.getSettings();
writeProject(writer, () -> {
writeParent(writer, build);
writeProjectCoordinates(writer, build);
writePackaging(writer, build);
writeProjectName(writer, build);
writeProjectCoordinates(writer, settings);
writePackaging(writer, settings);
writeProjectName(writer, settings);
writeProperties(writer, build);
writeDependencies(writer, build);
writeDependencyManagement(writer, build);
@ -77,7 +78,7 @@ public class MavenBuildWriter {
}
private void writeParent(IndentingWriter writer, MavenBuild build) {
MavenParent parent = build.getParent();
MavenParent parent = build.getSettings().getParent();
if (parent == null) {
return;
}
@ -91,22 +92,22 @@ public class MavenBuildWriter {
writer.println("</parent>");
}
private void writeProjectCoordinates(IndentingWriter writer, MavenBuild build) {
writeSingleElement(writer, "groupId", build.getGroup());
writeSingleElement(writer, "artifactId", build.getArtifact());
writeSingleElement(writer, "version", build.getVersion());
private void writeProjectCoordinates(IndentingWriter writer, MavenBuildSettings settings) {
writeSingleElement(writer, "groupId", settings.getGroup());
writeSingleElement(writer, "artifactId", settings.getArtifact());
writeSingleElement(writer, "version", settings.getVersion());
}
private void writePackaging(IndentingWriter writer, MavenBuild build) {
String packaging = build.getPackaging();
private void writePackaging(IndentingWriter writer, MavenBuildSettings settings) {
String packaging = settings.getPackaging();
if (!"jar".equals(packaging)) {
writeSingleElement(writer, "packaging", packaging);
}
}
private void writeProjectName(IndentingWriter writer, MavenBuild build) {
writeSingleElement(writer, "name", build.getName());
writeSingleElement(writer, "description", build.getDescription());
private void writeProjectName(IndentingWriter writer, MavenBuildSettings settings) {
writeSingleElement(writer, "name", settings.getName());
writeSingleElement(writer, "description", settings.getDescription());
}
private void writeProperties(IndentingWriter writer, MavenBuild build) {
@ -240,14 +241,15 @@ public class MavenBuildWriter {
}
private void writeBuild(IndentingWriter writer, MavenBuild build) {
if (build.getSourceDirectory() == null && build.getTestSourceDirectory() == null && build.resources().isEmpty()
&& build.testResources().isEmpty() && build.plugins().isEmpty()) {
MavenBuildSettings settings = build.getSettings();
if (settings.getSourceDirectory() == null && settings.getTestSourceDirectory() == null
&& build.resources().isEmpty() && build.testResources().isEmpty() && build.plugins().isEmpty()) {
return;
}
writer.println();
writeElement(writer, "build", () -> {
writeSingleElement(writer, "sourceDirectory", build.getSourceDirectory());
writeSingleElement(writer, "testSourceDirectory", build.getTestSourceDirectory());
writeSingleElement(writer, "sourceDirectory", settings.getSourceDirectory());
writeSingleElement(writer, "testSourceDirectory", settings.getTestSourceDirectory());
writeResources(writer, build);
writePlugins(writer, build);

View File

@ -16,6 +16,7 @@
package io.spring.initializr.generator.buildsystem;
import io.spring.initializr.generator.buildsystem.BuildSettings.Builder;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
@ -76,10 +77,31 @@ class BuildTests {
private static class TestBuild extends Build {
private final TestBuildSettingsBuilder settings = new TestBuildSettingsBuilder();
TestBuild(BuildItemResolver buildItemResolver) {
super(buildItemResolver);
}
@Override
public Builder<?> settings() {
return this.settings;
}
@Override
public BuildSettings getSettings() {
return this.settings.build();
}
private static class TestBuildSettingsBuilder extends BuildSettings.Builder<TestBuildSettingsBuilder> {
@Override
public BuildSettings build() {
return new BuildSettings(this);
}
}
}
}

View File

@ -43,8 +43,7 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithCoordinates() throws IOException {
GradleBuild build = new GradleBuild();
build.setGroup("com.example");
build.setVersion("1.0.1-SNAPSHOT");
build.settings().group("com.example").version("1.0.1-SNAPSHOT");
List<String> lines = generateBuild(build);
assertThat(lines).contains("group = 'com.example'", "version = '1.0.1-SNAPSHOT'");
}
@ -52,7 +51,7 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithSourceCompatibility() throws IOException {
GradleBuild build = new GradleBuild();
build.setSourceCompatibility("11");
build.settings().sourceCompatibility("11");
List<String> lines = generateBuild(build);
assertThat(lines).contains("sourceCompatibility = '11'");
}
@ -206,8 +205,6 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithExt() throws Exception {
GradleBuild build = new GradleBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.ext("java.version", "'1.8'").ext("alpha", "file(\"build/example\")");
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence(" set('alpha', file(\"build/example\"))",
@ -251,8 +248,6 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithExtAndVersionProperties() throws Exception {
GradleBuild build = new GradleBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.addInternalVersionProperty("test-version", "1.0");
build.addExternalVersionProperty("alpha-version", "0.1");
build.ext("myProperty", "'42'");
@ -424,7 +419,7 @@ class GroovyDslGradleBuildWriterTests {
@Test
void gradleBuildWithCustomVersion() throws IOException {
GradleBuild build = new GradleBuild();
build.setVersion("1.2.4.RELEASE");
build.settings().version("1.2.4.RELEASE");
List<String> lines = generateBuild(build);
assertThat(lines).contains("version = '1.2.4.RELEASE'");
}

View File

@ -79,7 +79,7 @@ class GroovyDslGradleSettingsWriterTests {
@Test
void artifactIdShouldBeUsedAsTheRootProjectName() throws Exception {
GradleBuild build = new GradleBuild();
build.setArtifact("my-application");
build.settings().artifact("my-application");
List<String> lines = generateSettings(build);
assertThat(lines).containsSequence("rootProject.name = 'my-application'");
}

View File

@ -42,8 +42,7 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithCoordinates() throws IOException {
GradleBuild build = new GradleBuild();
build.setGroup("com.example");
build.setVersion("1.0.1-SNAPSHOT");
build.settings().group("com.example").version("1.0.1-SNAPSHOT");
List<String> lines = generateBuild(build);
assertThat(lines).contains("group = \"com.example\"", "version = \"1.0.1-SNAPSHOT\"");
}
@ -51,7 +50,7 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithSourceCompatibility11() throws IOException {
GradleBuild build = new GradleBuild();
build.setSourceCompatibility("11");
build.settings().sourceCompatibility("11");
List<String> lines = generateBuild(build);
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_11");
}
@ -59,7 +58,7 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithSourceCompatibility1Dot8() throws IOException {
GradleBuild build = new GradleBuild();
build.setSourceCompatibility("1.8");
build.settings().sourceCompatibility("1.8");
List<String> lines = generateBuild(build);
assertThat(lines).contains("java.sourceCompatibility = JavaVersion.VERSION_1_8");
}
@ -211,8 +210,6 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithExt() throws Exception {
GradleBuild build = new GradleBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.ext("java.version", "\"1.8\"").ext("alpha", "file(\"build/example\")");
List<String> lines = generateBuild(build);
assertThat(lines).containsSequence("extra[\"alpha\"] = file(\"build/example\")",
@ -256,8 +253,6 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithExtAndVersionProperties() throws Exception {
GradleBuild build = new GradleBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.addInternalVersionProperty("test-version", "1.0");
build.addExternalVersionProperty("alpha-version", "0.1");
build.ext("myProperty", "42");
@ -432,7 +427,7 @@ class KotlinDslGradleBuildWriterTests {
@Test
void gradleBuildWithCustomVersion() throws IOException {
GradleBuild build = new GradleBuild();
build.setVersion("1.2.4.RELEASE");
build.settings().version("1.2.4.RELEASE");
List<String> lines = generateBuild(build);
assertThat(lines).contains("version = \"1.2.4.RELEASE\"");
}

View File

@ -78,7 +78,7 @@ class KotlinDslGradleSettingsWriterTests {
@Test
void artifactIdShouldBeUsedAsTheRootProjectName() throws Exception {
GradleBuild build = new GradleBuild();
build.setArtifact("my-application");
build.settings().artifact("my-application");
List<String> lines = generateSettings(build);
assertThat(lines).containsSequence("rootProject.name = \"my-application\"");
}

View File

@ -40,9 +40,7 @@ class MavenBuildWriterTests {
@Test
void basicPom() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.setVersion("1.0.1-SNAPSHOT");
build.settings().coordinates("com.example.demo", "demo").version("1.0.1-SNAPSHOT");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/modelVersion").isEqualTo("4.0.0");
assertThat(pom).textAtPath("/project/groupId").isEqualTo("com.example.demo");
@ -54,10 +52,7 @@ class MavenBuildWriterTests {
@Test
void pomWithNameAndDescription() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.setName("demo project");
build.setDescription("A demo project");
build.settings().coordinates("com.example.demo", "demo").name("demo project").description("A demo project");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/modelVersion").isEqualTo("4.0.0");
assertThat(pom).textAtPath("/project/groupId").isEqualTo("com.example.demo");
@ -71,9 +66,8 @@ class MavenBuildWriterTests {
@Test
void pomWithParent() 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");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/parent/groupId").isEqualTo("org.springframework.boot");
assertThat(pom).textAtPath("/project/parent/artifactId").isEqualTo("spring-boot-starter-parent");
@ -84,17 +78,14 @@ class MavenBuildWriterTests {
@Test
void pomWithPackaging() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.setPackaging("war");
build.settings().coordinates("com.example.demo", "demo").packaging("war");
generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/packaging").isEqualTo("war"));
}
@Test
void pomWithProperties() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.setProperty("java.version", "1.8");
build.setProperty("alpha", "a");
generatePom(build, (pom) -> {
@ -119,8 +110,7 @@ class MavenBuildWriterTests {
@Test
void pomWithAnnotationProcessorDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("annotation-processor", "org.springframework.boot",
"spring-boot-configuration-processor", DependencyScope.ANNOTATION_PROCESSOR);
generatePom(build, (pom) -> {
@ -136,8 +126,7 @@ class MavenBuildWriterTests {
@Test
void pomWithCompileOnlyDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("foo-bar", "org.springframework.boot", "spring-boot-foo-bar",
DependencyScope.COMPILE_ONLY);
generatePom(build, (pom) -> {
@ -153,8 +142,7 @@ class MavenBuildWriterTests {
@Test
void pomWithCompileDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("root", "org.springframework.boot", "spring-boot-starter", DependencyScope.COMPILE);
generatePom(build, (pom) -> {
NodeAssert dependency = pom.nodeAtPath("/project/dependencies/dependency");
@ -169,8 +157,7 @@ class MavenBuildWriterTests {
@Test
void pomWithNoScopeDependencyDefaultsToCompile() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("root", Dependency.withCoordinates("org.springframework.boot", "spring-boot-starter"));
generatePom(build, (pom) -> {
NodeAssert dependency = pom.nodeAtPath("/project/dependencies/dependency");
@ -185,8 +172,7 @@ class MavenBuildWriterTests {
@Test
void pomWithRuntimeDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("hikari", "com.zaxxer", "HikariCP", DependencyScope.RUNTIME);
generatePom(build, (pom) -> {
NodeAssert dependency = pom.nodeAtPath("/project/dependencies/dependency");
@ -201,8 +187,7 @@ class MavenBuildWriterTests {
@Test
void pomWithProvidedRuntimeDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("tomcat", "org.springframework.boot", "spring-boot-starter-tomcat",
DependencyScope.PROVIDED_RUNTIME);
generatePom(build, (pom) -> {
@ -218,8 +203,7 @@ class MavenBuildWriterTests {
@Test
void pomWithTestCompileDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("test", "org.springframework.boot", "spring-boot-starter-test",
DependencyScope.TEST_COMPILE);
generatePom(build, (pom) -> {
@ -235,8 +219,7 @@ class MavenBuildWriterTests {
@Test
void pomWithTestRuntimeDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("embed-mongo", "de.flapdoodle.embed", "de.flapdoodle.embed.mongo",
DependencyScope.TEST_RUNTIME);
generatePom(build, (pom) -> {
@ -252,8 +235,7 @@ class MavenBuildWriterTests {
@Test
void pomWithExclusions() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("test",
Dependency.withCoordinates("com.example", "test").scope(DependencyScope.COMPILE).exclusions(
new Exclusion("com.example.legacy", "legacy-one"),
@ -278,8 +260,7 @@ class MavenBuildWriterTests {
@Test
void pomWithOptionalDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("annotation-processor",
MavenDependency.withCoordinates("org.springframework.boot", "spring-boot-configuration-processor")
.scope(DependencyScope.COMPILE).optional(true));
@ -296,8 +277,7 @@ class MavenBuildWriterTests {
@Test
void pomWithNonNullArtifactTypeDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.dependencies().add("root", Dependency.withCoordinates("org.springframework.boot", "spring-boot-starter")
.scope(DependencyScope.COMPILE).type("tar.gz"));
generatePom(build, (pom) -> {
@ -309,8 +289,7 @@ class MavenBuildWriterTests {
@Test
void pomWithBom() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.boms().add("test", "com.example", "my-project-dependencies", VersionReference.ofValue("1.0.0.RELEASE"));
generatePom(build, (pom) -> {
NodeAssert dependency = pom.nodeAtPath("/project/dependencyManagement/dependencies/dependency");
@ -321,8 +300,7 @@ class MavenBuildWriterTests {
@Test
void pomWithOrderedBoms() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.boms().add("bom1", "com.example", "my-project-dependencies", VersionReference.ofValue("1.0.0.RELEASE"),
5);
build.boms().add("bom2", "com.example", "root-dependencies", VersionReference.ofProperty("root.version"), 2);
@ -379,8 +357,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPlugin() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin");
generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
@ -394,8 +371,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPluginWithConfiguration() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin",
(plugin) -> plugin.configuration((configuration) -> {
configuration.configure("args", (args) -> args.add("arg", "-Xjsr305=strict"));
@ -416,8 +392,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPluginWithExecution() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.plugins().add("org.asciidoctor", "asciidoctor-maven-plugin", (plugin) -> {
plugin.setVersion("1.5.3");
plugin.execution("generateProject-docs", (execution) -> {
@ -447,8 +422,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPluginWithDependency() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.plugins().add("org.jetbrains.kotlin", "kotlin-maven-plugin",
(plugin) -> plugin.dependency("org.jetbrains.kotlin", "kotlin-maven-allopen", "${kotlin.version}"));
generatePom(build, (pom) -> {
@ -465,8 +439,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPluginWithExtensions() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.plugins().add("com.example.demo", "demo-plugin", MavenPlugin::extensions);
generatePom(build, (pom) -> {
NodeAssert plugin = pom.nodeAtPath("/project/build/plugins/plugin");
@ -479,16 +452,14 @@ class MavenBuildWriterTests {
@Test
void pomWithEmptyBuild() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/build/").isNullOrEmpty());
}
@Test
void pomWithMavenCentral() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.repositories().add("maven-central");
generatePom(build, (pom) -> {
assertThat(pom).nodeAtPath("/project/repositories").isNull();
@ -499,8 +470,7 @@ class MavenBuildWriterTests {
@Test
void pomWithRepository() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.repositories().add("spring-milestones", "Spring Milestones", "https://repo.spring.io/milestone");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/repositories/repository/id").isEqualTo("spring-milestones");
@ -515,8 +485,7 @@ class MavenBuildWriterTests {
@Test
void pomWithPluginRepository() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.pluginRepositories().add("spring-milestones", "Spring Milestones", "https://repo.spring.io/milestone");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/pluginRepositories/pluginRepository/id")
@ -533,8 +502,7 @@ class MavenBuildWriterTests {
@Test
void pomWithSnapshotRepository() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.repositories().add("spring-snapshots", "Spring Snapshots", "https://repo.spring.io/snapshot", true);
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/repositories/repository/id").isEqualTo("spring-snapshots");
@ -549,8 +517,7 @@ class MavenBuildWriterTests {
@Test
void pomWithSnapshotPluginRepository() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.settings().coordinates("com.example.demo", "demo");
build.pluginRepositories().add("spring-snapshots", "Spring Snapshots", "https://repo.spring.io/snapshot", true);
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/pluginRepositories/pluginRepository/id").isEqualTo("spring-snapshots");
@ -567,10 +534,8 @@ class MavenBuildWriterTests {
@Test
void pomWithCustomSourceDirectories() throws Exception {
MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo");
build.setArtifact("demo");
build.setSourceDirectory("${project.basedir}/src/main/kotlin");
build.setTestSourceDirectory("${project.basedir}/src/test/kotlin");
build.settings().coordinates("com.example.demo", "demo").sourceDirectory("${project.basedir}/src/main/kotlin")
.testSourceDirectory("${project.basedir}/src/test/kotlin");
generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/build/sourceDirectory")
.isEqualTo("${project.basedir}/src/main/kotlin");
@ -582,7 +547,7 @@ class MavenBuildWriterTests {
@Test
void pomWithCustomVersion() throws Exception {
MavenBuild build = new MavenBuild();
build.setVersion("1.2.4.RELEASE");
build.settings().version("1.2.4.RELEASE");
generatePom(build, (pom) -> assertThat(pom).textAtPath("/project/version").isEqualTo("1.2.4.RELEASE"));
}