mirror of
https://gitee.com/dcren/initializr.git
synced 2026-02-25 21:22:58 +08:00
Polish "Handle metadata resolution failures properly"
See gh-1039
This commit is contained in:
@@ -19,7 +19,6 @@ package io.spring.initializr.metadata;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
@@ -186,27 +185,13 @@ public class BillOfMaterials {
|
||||
* additional BOMs to use, if any.
|
||||
* @param bootVersion the Spring Boot version
|
||||
* @return the bill of materials
|
||||
* @throws IllegalStateException if bom has mappings, none of which match the
|
||||
* requested version
|
||||
* @throws InvalidInitializrMetadataException if no suitable mapping is found for that
|
||||
* version
|
||||
*/
|
||||
public BillOfMaterials resolve(Version bootVersion) {
|
||||
return this.resolveSafe(bootVersion).orElseThrow(() -> new IllegalStateException(
|
||||
"No suitable mapping was found for " + this + " and version " + bootVersion));
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve this instance according to the specified Spring Boot {@link Version}.
|
||||
* Return a {@link BillOfMaterials} instance that holds the version, repositories and
|
||||
* additional BOMs to use, if any.
|
||||
* @param bootVersion the Spring Boot version
|
||||
* @return the bill of materials or empty if bom has mappings, none of which match the
|
||||
* requested version
|
||||
*/
|
||||
public Optional<BillOfMaterials> resolveSafe(Version bootVersion) {
|
||||
if (this.mappings.isEmpty()) {
|
||||
return Optional.of(this);
|
||||
return this;
|
||||
}
|
||||
|
||||
for (Mapping mapping : this.mappings) {
|
||||
if (mapping.range.match(bootVersion)) {
|
||||
BillOfMaterials resolvedBom = new BillOfMaterials(
|
||||
@@ -218,10 +203,11 @@ public class BillOfMaterials {
|
||||
.addAll(!mapping.repositories.isEmpty() ? mapping.repositories : this.repositories);
|
||||
resolvedBom.additionalBoms
|
||||
.addAll(!mapping.additionalBoms.isEmpty() ? mapping.additionalBoms : this.additionalBoms);
|
||||
return Optional.of(resolvedBom);
|
||||
return resolvedBom;
|
||||
}
|
||||
}
|
||||
return Optional.empty();
|
||||
throw new InvalidInitializrMetadataException(
|
||||
"No suitable mapping was found for " + this + " and version " + bootVersion);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,7 +24,7 @@ import io.spring.initializr.metadata.BillOfMaterials.Mapping;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
|
||||
/**
|
||||
* @author Stephane Nicoll
|
||||
@@ -119,17 +119,8 @@ class BillOfMaterialsTests {
|
||||
bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0"));
|
||||
bom.getMappings().add(Mapping.create("[1.3.0.M1, 1.4.0.M1)", "1.2.0"));
|
||||
bom.validate();
|
||||
assertThatIllegalStateException().isThrownBy(() -> bom.resolve(Version.parse("1.4.1.RELEASE")))
|
||||
.withMessageContaining("1.4.1.RELEASE");
|
||||
}
|
||||
|
||||
@Test
|
||||
void noRangeAvailableSafe() {
|
||||
BillOfMaterials bom = BillOfMaterials.create("com.example", "bom");
|
||||
bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0"));
|
||||
bom.getMappings().add(Mapping.create("[1.3.0.M1, 1.4.0.M1)", "1.2.0"));
|
||||
bom.validate();
|
||||
assertThat(bom.resolveSafe(Version.parse("1.4.1.RELEASE"))).isEmpty();
|
||||
assertThatExceptionOfType(InvalidInitializrMetadataException.class)
|
||||
.isThrownBy(() -> bom.resolve(Version.parse("1.4.1.RELEASE"))).withMessageContaining("1.4.1.RELEASE");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user