public void setVersionProperty(String versionPropertyName) { setVersionProperty(VersionProperty.of(versionPropertyName)); }
/** * 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 */ public BillOfMaterials resolve(Version bootVersion) { if (this.mappings.isEmpty()) { return this; } for (Mapping mapping : this.mappings) { if (mapping.range.match(bootVersion)) { BillOfMaterials resolvedBom = new BillOfMaterials( (mapping.groupId != null) ? mapping.groupId : this.groupId, (mapping.artifactId != null) ? mapping.artifactId : this.artifactId, mapping.version); resolvedBom.setVersionProperty(this.versionProperty); resolvedBom.setOrder(this.order); resolvedBom.repositories.addAll(!mapping.repositories.isEmpty() ? mapping.repositories : this.repositories); resolvedBom.additionalBoms.addAll(!mapping.additionalBoms.isEmpty() ? mapping.additionalBoms : this.additionalBoms); return resolvedBom; } } throw new IllegalStateException("No suitable mapping was found for " + this + " and version " + bootVersion); }
/** * Create a {@link BillOfMaterials} for the spring boot BOM. * @param bootVersion the Spring Boot version * @param versionProperty the property that contains the version * @return a new {@link BillOfMaterials} instance */ public BillOfMaterials createSpringBootBom(String bootVersion, String versionProperty) { BillOfMaterials bom = BillOfMaterials.create("org.springframework.boot", "spring-boot-dependencies", bootVersion); bom.setVersionProperty(VersionProperty.of(versionProperty)); bom.setOrder(100); return bom; }
@Test void resolveSimpleRange() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.setVersionProperty("bom.version"); bom.getRepositories().add("repo-main"); bom.getAdditionalBoms().add("bom-main"); bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0")); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId()).isEqualTo("com.example"); assertThat(resolved.getArtifactId()).isEqualTo("bom"); assertThat(resolved.getVersion()).isEqualTo("1.1.0"); assertThat(resolved.getVersionProperty().toStandardFormat()) .isEqualTo("bom.version"); assertThat(resolved.getRepositories()).hasSize(1); assertThat(resolved.getRepositories().get(0)).isEqualTo("repo-main"); assertThat(resolved.getAdditionalBoms()).hasSize(1); assertThat(resolved.getAdditionalBoms().get(0)).isEqualTo("bom-main"); }
@Test void resolveRangeOverrideAndMapping() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.setVersionProperty("example.version"); bom.getMappings().add(Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0")); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId()).isEqualTo("com.example"); assertThat(resolved.getArtifactId()).isEqualTo("bom"); assertThat(resolved.getVersion()).isEqualTo("1.1.0"); assertThat(resolved.getVersionProperty().toStandardFormat()) .isEqualTo("example.version"); }
@Test void resolveSimpleRangeWithGroupIdArtifactId() { BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "1.0.0"); bom.setVersionProperty("bom.version"); bom.getRepositories().add("repo-main"); bom.getAdditionalBoms().add("bom-main"); Mapping mapping = Mapping.create("[1.2.0.RELEASE,1.3.0.M1)", "1.1.0"); mapping.setGroupId("com.example.override"); mapping.setArtifactId("bom-override"); bom.getMappings().add(mapping); bom.validate(); BillOfMaterials resolved = bom.resolve(Version.parse("1.2.3.RELEASE")); assertThat(resolved.getGroupId()).isEqualTo("com.example.override"); assertThat(resolved.getArtifactId()).isEqualTo("bom-override"); assertThat(resolved.getVersion()).isEqualTo("1.1.0"); assertThat(resolved.getVersionProperty().toStandardFormat()) .isEqualTo("bom.version"); assertThat(resolved.getRepositories()).hasSize(1); assertThat(resolved.getRepositories().get(0)).isEqualTo("repo-main"); assertThat(resolved.getAdditionalBoms()).hasSize(1); assertThat(resolved.getAdditionalBoms().get(0)).isEqualTo("bom-main"); }
@ParameterizedTest @MethodSource("parameters") public void bomWithVersionProperty(String build, String fileName) { Dependency foo = Dependency.withId("foo", "org.acme", "foo"); foo.setBom("the-bom"); BillOfMaterials bom = BillOfMaterials.create("org.acme", "foo-bom", "1.3.3"); bom.setVersionProperty("foo.version"); InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() .addDependencyGroup("foo", foo).addBom("the-bom", bom).build(); applyMetadata(metadata); ProjectRequest request = createProjectRequestForType(build, "foo"); ProjectAssert project = generateProject(request); project.sourceCodeAssert(fileName).equalsTo(new ClassPathResource( "project/" + build + "/bom-property-" + getAssertFileName(fileName))); }