MetadataBuildItemResolver should use platform version

Closes gh-872
This commit is contained in:
Stephane Nicoll
2019-03-17 14:41:03 +01:00
parent 9050056f24
commit 568ef5ed32
12 changed files with 115 additions and 26 deletions

View File

@@ -43,9 +43,10 @@ public final class MetadataBuildItemMapper {
if (dependency == null) {
return null;
}
VersionReference versionReference = (dependency.getVersion() != null)
? VersionReference.ofValue(dependency.getVersion()) : null;
return new io.spring.initializr.generator.buildsystem.Dependency(
dependency.getGroupId(), dependency.getArtifactId(),
VersionReference.ofValue(dependency.getVersion()),
dependency.getGroupId(), dependency.getArtifactId(), versionReference,
toDependencyScope(dependency.getScope()), dependency.getType());
}

View File

@@ -20,11 +20,12 @@ import io.spring.initializr.generator.buildsystem.BillOfMaterials;
import io.spring.initializr.generator.buildsystem.BuildItemResolver;
import io.spring.initializr.generator.buildsystem.Dependency;
import io.spring.initializr.generator.buildsystem.MavenRepository;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.InitializrMetadata;
/**
* A {@link BuildItemResolver} that uses the {@link InitializrMetadata} to resolve build
* items.
* items against a given platform {@link Version}.
*
* @author Stephane Nicoll
*/
@@ -32,20 +33,39 @@ public final class MetadataBuildItemResolver implements BuildItemResolver {
private final InitializrMetadata metadata;
public MetadataBuildItemResolver(InitializrMetadata metadata) {
private final Version platformVersion;
/**
* Creates an instance for the specified {@link InitializrMetadata} and {@link Version
* platform version}.
* @param metadata the metadata to use
* @param platformVersion the platform version to consider
*/
public MetadataBuildItemResolver(InitializrMetadata metadata,
Version platformVersion) {
this.metadata = metadata;
this.platformVersion = platformVersion;
}
@Override
public Dependency resolveDependency(String id) {
return MetadataBuildItemMapper
.toDependency(this.metadata.getDependencies().get(id));
io.spring.initializr.metadata.Dependency dependency = this.metadata
.getDependencies().get(id);
if (dependency != null) {
return MetadataBuildItemMapper
.toDependency(dependency.resolve(this.platformVersion));
}
return null;
}
@Override
public BillOfMaterials resolveBom(String id) {
return MetadataBuildItemMapper
.toBom(this.metadata.getConfiguration().getEnv().getBoms().get(id));
io.spring.initializr.metadata.BillOfMaterials bom = this.metadata
.getConfiguration().getEnv().getBoms().get(id);
if (bom != null) {
return MetadataBuildItemMapper.toBom(bom.resolve(this.platformVersion));
}
return null;
}
@Override

View File

@@ -21,8 +21,10 @@ import java.net.URL;
import io.spring.initializr.generator.buildsystem.DependencyScope;
import io.spring.initializr.generator.buildsystem.MavenRepository;
import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.BillOfMaterials;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.Dependency.Mapping;
import io.spring.initializr.metadata.DependencyGroup;
import io.spring.initializr.metadata.InitializrMetadata;
import io.spring.initializr.metadata.Repository;
@@ -37,6 +39,8 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class MetadataBuildItemResolverTests {
private static final Version VERSION_2_0_0 = Version.parse("2.0.0.RELEASE");
@Test
void resoleDependencyWithMatchingEntry() {
InitializrMetadata metadata = new InitializrMetadata();
@@ -45,7 +49,8 @@ class MetadataBuildItemResolverTests {
Dependency.withId("test-dep", "com.example", "test", "1.0.0", "runtime"));
metadata.getDependencies().getContent().add(group);
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
io.spring.initializr.generator.buildsystem.Dependency dependency = resolver
.resolveDependency("test-dep");
assertThat(dependency.getGroupId()).isEqualTo("com.example");
@@ -54,6 +59,28 @@ class MetadataBuildItemResolverTests {
assertThat(dependency.getScope()).isEqualTo(DependencyScope.RUNTIME);
}
@Test
void resoleDependencyWithMatchingEntryAndVersionRange() {
InitializrMetadata metadata = new InitializrMetadata();
DependencyGroup group = DependencyGroup.create("test");
Dependency dependency = Dependency.withId("test-dep", "com.example", "test");
dependency.getMappings().add(Mapping.create("[1.0.0.RELEASE, 2.0.0.RELEASE)",
null, null, "1.0.0.RELEASE"));
dependency.getMappings().add(Mapping.create("2.0.0.RELEASE",
"com.example.override", "test-override", null));
group.getContent().add(dependency);
metadata.getDependencies().getContent().add(group);
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
io.spring.initializr.generator.buildsystem.Dependency resolveDependency = resolver
.resolveDependency("test-dep");
assertThat(resolveDependency.getGroupId()).isEqualTo("com.example.override");
assertThat(resolveDependency.getArtifactId()).isEqualTo("test-override");
assertThat(resolveDependency.getVersion()).isNull();
assertThat(resolveDependency.getScope()).isEqualTo(DependencyScope.COMPILE);
}
@Test
void resoleDependencyWithNotMatchingEntry() {
InitializrMetadata metadata = new InitializrMetadata();
@@ -62,7 +89,8 @@ class MetadataBuildItemResolverTests {
Dependency.withId("test-dep", "com.example", "test", "1.0.0", "runtime"));
metadata.getDependencies().getContent().add(group);
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
assertThat(resolver.resolveDependency("does-not-exist")).isNull();
}
@@ -72,7 +100,8 @@ class MetadataBuildItemResolverTests {
BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "2.0.0");
metadata.getConfiguration().getEnv().getBoms().put("test-bom", bom);
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
io.spring.initializr.generator.buildsystem.BillOfMaterials resolvedBom = resolver
.resolveBom("test-bom");
assertThat(resolvedBom.getGroupId()).isEqualTo("com.example");
@@ -80,13 +109,34 @@ class MetadataBuildItemResolverTests {
assertThat(resolvedBom.getVersion()).hasToString("2.0.0");
}
@Test
void resoleBomWithMatchingEntryAndVersionRange() throws MalformedURLException {
InitializrMetadata metadata = new InitializrMetadata();
BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "0.0.1");
bom.getMappings().add(BillOfMaterials.Mapping
.create("[1.0.0.RELEASE, 2.0.0.RELEASE)", "1.0.0"));
bom.getMappings().add(BillOfMaterials.Mapping.create("2.0.0.RELEASE", "1.1.0"));
metadata.getConfiguration().getEnv().getBoms().put("test-bom", bom);
metadata.getConfiguration().getEnv().getRepositories().put("test-repo",
new Repository("test", new URL("https://example.com/repo"), false));
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
io.spring.initializr.generator.buildsystem.BillOfMaterials resolvedBom = resolver
.resolveBom("test-bom");
assertThat(resolvedBom.getGroupId()).isEqualTo("com.example");
assertThat(resolvedBom.getArtifactId()).isEqualTo("bom");
assertThat(resolvedBom.getVersion()).hasToString("1.1.0");
}
@Test
void resoleBomWithNotMatchingEntry() {
InitializrMetadata metadata = new InitializrMetadata();
BillOfMaterials bom = BillOfMaterials.create("com.example", "bom", "2.0.0");
metadata.getConfiguration().getEnv().getBoms().put("test-bom", bom);
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
assertThat(resolver.resolveBom("does-not-exost")).isNull();
}
@@ -96,7 +146,8 @@ class MetadataBuildItemResolverTests {
metadata.getConfiguration().getEnv().getRepositories().put("test-repo",
new Repository("test", new URL("https://example.com/repo"), false));
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
MavenRepository repository = resolver.resolveRepository("test-repo");
assertThat(repository.getId()).isEqualTo("test-repo");
assertThat(repository.getName()).isEqualTo("test");
@@ -110,7 +161,8 @@ class MetadataBuildItemResolverTests {
metadata.getConfiguration().getEnv().getRepositories().put("test-repo",
new Repository("test", new URL("https://example.com/repo"), false));
metadata.validate();
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata);
MetadataBuildItemResolver resolver = new MetadataBuildItemResolver(metadata,
VERSION_2_0_0);
assertThat(resolver.resolveRepository("does-not-exist")).isNull();
}