class DefaultMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {

	private final ProjectDescription description;

	private final InitializrMetadata metadata;

	public DefaultMavenBuildCustomizer(ProjectDescription description, InitializrMetadata metadata) {
		this.description = description;
		this.metadata = metadata;
	}

	@Override
	public void customize(MavenBuild build) {<FILL_FUNCTION_BODY>}

	private boolean hasBom(MavenBuild build, BillOfMaterials bom) {
		return build.boms()
			.items()
			.anyMatch((candidate) -> candidate.getGroupId().equals(bom.getGroupId())
					&& candidate.getArtifactId().equals(bom.getArtifactId()));
	}

}

		build.settings().name(this.description.getName()).description(this.description.getDescription());
		build.properties().property("java.version", this.description.getLanguage().jvmVersion());
		build.plugins().add("org.springframework.boot", "spring-boot-maven-plugin");

		Maven maven = this.metadata.getConfiguration().getEnv().getMaven();
		String springBootVersion = this.description.getPlatformVersion().toString();
		ParentPom parentPom = maven.resolveParentPom(springBootVersion);
		if (parentPom.isIncludeSpringBootBom()) {
			String versionProperty = "spring-boot.version";
			BillOfMaterials springBootBom = MetadataBuildItemMapper
				.toBom(this.metadata.createSpringBootBom(springBootVersion, versionProperty));
			if (!hasBom(build, springBootBom)) {
				build.properties().version(VersionProperty.of(versionProperty, true), springBootVersion);
				build.boms().add("spring-boot", springBootBom);
			}
		}
		if (!maven.isSpringBootStarterParent(parentPom)) {
			build.properties()
				.property("project.build.sourceEncoding", "UTF-8")
				.property("project.reporting.outputEncoding", "UTF-8");
		}
		build.settings()
			.parent(parentPom.getGroupId(), parentPom.getArtifactId(), parentPom.getVersion(),
					parentPom.getRelativePath());
	
<no_super_class>