Map project version from version capability

Closes gh-832
This commit is contained in:
Stephane Nicoll
2019-02-14 14:52:07 +01:00
parent 24887e1ab3
commit 701f3f6277
11 changed files with 56 additions and 36 deletions

View File

@@ -92,8 +92,8 @@ public class BuildProjectGenerationConfiguration {
@Bean @Bean
public SimpleBuildCustomizer projectDescriptionBuildCustomizer( public SimpleBuildCustomizer projectDescriptionBuildCustomizer(
ResolvedProjectDescription projectDescription, InitializrMetadata metadata) { ResolvedProjectDescription projectDescription) {
return new SimpleBuildCustomizer(projectDescription, metadata); return new SimpleBuildCustomizer(projectDescription);
} }
@Bean @Bean

View File

@@ -18,7 +18,6 @@ package io.spring.initializr.generator.spring.build;
import io.spring.initializr.generator.buildsystem.Build; import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.project.ResolvedProjectDescription; import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.core.Ordered; import org.springframework.core.Ordered;
@@ -33,19 +32,15 @@ public class SimpleBuildCustomizer implements BuildCustomizer<Build> {
private final ResolvedProjectDescription projectDescription; private final ResolvedProjectDescription projectDescription;
private final InitializrMetadata metadata; public SimpleBuildCustomizer(ResolvedProjectDescription projectDescription) {
public SimpleBuildCustomizer(ResolvedProjectDescription projectDescription,
InitializrMetadata metadata) {
this.projectDescription = projectDescription; this.projectDescription = projectDescription;
this.metadata = metadata;
} }
@Override @Override
public void customize(Build build) { public void customize(Build build) {
build.setGroup(this.projectDescription.getGroupId()); build.setGroup(this.projectDescription.getGroupId());
build.setArtifact(this.projectDescription.getArtifactId()); build.setArtifact(this.projectDescription.getArtifactId());
build.setVersion(this.metadata.getVersion().getContent()); build.setVersion(this.projectDescription.getVersion());
this.projectDescription.getRequestedDependencies() this.projectDescription.getRequestedDependencies()
.forEach((id, dependency) -> build.dependencies().add(id, dependency)); .forEach((id, dependency) -> build.dependencies().add(id, dependency));
} }

View File

@@ -118,6 +118,7 @@ public abstract class AbstractComplianceTests {
description.setLanguage(language); description.setLanguage(language);
description.setBuildSystem(buildSystem); description.setBuildSystem(buildSystem);
description.setPlatformVersion(Version.parse(version)); description.setPlatformVersion(Version.parse(version));
description.setVersion("0.0.1-SNAPSHOT");
description.setName("demo"); description.setName("demo");
description.setDescription("Demo project for Spring Boot"); description.setDescription("Demo project for Spring Boot");
} }

View File

@@ -22,9 +22,7 @@ import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.language.java.JavaLanguage; import io.spring.initializr.generator.language.java.JavaLanguage;
import io.spring.initializr.generator.project.ProjectDescription; import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ResolvedProjectDescription; import io.spring.initializr.generator.project.ResolvedProjectDescription;
import io.spring.initializr.generator.spring.test.InitializrMetadataTestBuilder;
import io.spring.initializr.generator.version.Version; import io.spring.initializr.generator.version.Version;
import io.spring.initializr.metadata.InitializrMetadata;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@@ -39,46 +37,39 @@ class SimpleBuildCustomizerTests {
@Test @Test
void customizeProjectCoordinates() { void customizeProjectCoordinates() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.build();
ProjectDescription description = initializeDescription(); ProjectDescription description = initializeDescription();
description.setGroupId("com.example.acme"); description.setGroupId("com.example.acme");
description.setArtifactId("my-test-project"); description.setArtifactId("my-test-project");
MavenBuild build = customizeBuild(metadata, description); MavenBuild build = customizeBuild(description);
assertThat(build.getGroup()).isEqualTo("com.example.acme"); assertThat(build.getGroup()).isEqualTo("com.example.acme");
assertThat(build.getArtifact()).isEqualTo("my-test-project"); assertThat(build.getArtifact()).isEqualTo("my-test-project");
} }
@Test @Test
void customizeShouldSetVersionFromMetadata() { void customizeVersion() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults() ProjectDescription description = initializeDescription();
.build(); description.setVersion("1.5.6.RELEASE");
metadata.getVersion().setContent("1.5.6.RELEASE"); MavenBuild build = customizeBuild(description);
MavenBuild build = customizeBuild(metadata);
assertThat(build.getVersion()).isEqualTo("1.5.6.RELEASE"); assertThat(build.getVersion()).isEqualTo("1.5.6.RELEASE");
} }
@Test @Test
void customizeWithNoDependency() { void customizeWithNoDependency() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.build();
ProjectDescription description = initializeDescription(); ProjectDescription description = initializeDescription();
MavenBuild build = customizeBuild(metadata, description); MavenBuild build = customizeBuild(description);
assertThat(build.dependencies().ids()).isEmpty(); assertThat(build.dependencies().ids()).isEmpty();
assertThat(build.dependencies().items()).isEmpty(); assertThat(build.dependencies().items()).isEmpty();
} }
@Test @Test
void customizeDependencies() { void customizeDependencies() {
InitializrMetadata metadata = InitializrMetadataTestBuilder.withDefaults()
.build();
ProjectDescription description = initializeDescription(); ProjectDescription description = initializeDescription();
Dependency one = new Dependency("com.example", "one", DependencyScope.COMPILE); Dependency one = new Dependency("com.example", "one", DependencyScope.COMPILE);
Dependency two = new Dependency("com.example.acme", "two", Dependency two = new Dependency("com.example.acme", "two",
DependencyScope.COMPILE); DependencyScope.COMPILE);
description.addDependency("two", two); description.addDependency("two", two);
description.addDependency("one", one); description.addDependency("one", one);
MavenBuild build = customizeBuild(metadata, description); MavenBuild build = customizeBuild(description);
assertThat(build.dependencies().ids()).containsExactly("two", "one"); assertThat(build.dependencies().ids()).containsExactly("two", "one");
assertThat(build.dependencies().items()).containsExactly(two, one); assertThat(build.dependencies().items()).containsExactly(two, one);
} }
@@ -90,18 +81,12 @@ class SimpleBuildCustomizerTests {
return description; return description;
} }
private MavenBuild customizeBuild(InitializrMetadata metadata) { private MavenBuild customizeBuild(ProjectDescription description) {
ProjectDescription description = initializeDescription();
return customizeBuild(metadata, description);
}
private MavenBuild customizeBuild(InitializrMetadata metadata,
ProjectDescription description) {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
ResolvedProjectDescription resolvedProjectDescription = new ResolvedProjectDescription( ResolvedProjectDescription resolvedProjectDescription = new ResolvedProjectDescription(
description); description);
SimpleBuildCustomizer customizer = new SimpleBuildCustomizer( SimpleBuildCustomizer customizer = new SimpleBuildCustomizer(
resolvedProjectDescription, metadata); resolvedProjectDescription);
customizer.customize(build); customizer.customize(build);
return build; return build;
} }

View File

@@ -47,6 +47,8 @@ public class ProjectDescription {
private String artifactId; private String artifactId;
private String version;
private String name; private String name;
private String description; private String description;
@@ -121,6 +123,14 @@ public class ProjectDescription {
this.artifactId = artifactId; this.artifactId = artifactId;
} }
public String getVersion() {
return this.version;
}
public void setVersion(String version) {
this.version = version;
}
public String getName() { public String getName() {
return this.name; return this.name;
} }

View File

@@ -49,6 +49,8 @@ public final class ResolvedProjectDescription {
private final String artifactId; private final String artifactId;
private final String version;
private final String name; private final String name;
private final String description; private final String description;
@@ -66,6 +68,7 @@ public final class ResolvedProjectDescription {
this.language = description.getLanguage(); this.language = description.getLanguage();
this.groupId = description.getGroupId(); this.groupId = description.getGroupId();
this.artifactId = description.getArtifactId(); this.artifactId = description.getArtifactId();
this.version = description.getVersion();
this.name = description.getName(); this.name = description.getName();
this.description = description.getDescription(); this.description = description.getDescription();
this.applicationName = description.getApplicationName(); this.applicationName = description.getApplicationName();
@@ -115,6 +118,10 @@ public final class ResolvedProjectDescription {
return this.artifactId; return this.artifactId;
} }
public String getVersion() {
return this.version;
}
public String getName() { public String getName() {
return this.name; return this.name;
} }

View File

@@ -40,9 +40,9 @@ class GradleBuildWriterTests {
void gradleBuildWithCoordinates() throws IOException { void gradleBuildWithCoordinates() throws IOException {
GradleBuild build = new GradleBuild(); GradleBuild build = new GradleBuild();
build.setGroup("com.example"); build.setGroup("com.example");
build.setVersion("0.0.1-SNAPSHOT"); build.setVersion("1.0.1-SNAPSHOT");
List<String> lines = generateBuild(build); List<String> lines = generateBuild(build);
assertThat(lines).contains("group = 'com.example'", "version = '0.0.1-SNAPSHOT'"); assertThat(lines).contains("group = 'com.example'", "version = '1.0.1-SNAPSHOT'");
} }
@Test @Test

View File

@@ -40,11 +40,12 @@ class MavenBuildWriterTests {
MavenBuild build = new MavenBuild(); MavenBuild build = new MavenBuild();
build.setGroup("com.example.demo"); build.setGroup("com.example.demo");
build.setArtifact("demo"); build.setArtifact("demo");
build.setVersion("1.0.1-SNAPSHOT");
generatePom(build, (pom) -> { generatePom(build, (pom) -> {
assertThat(pom).textAtPath("/project/modelVersion").isEqualTo("4.0.0"); assertThat(pom).textAtPath("/project/modelVersion").isEqualTo("4.0.0");
assertThat(pom).textAtPath("/project/groupId").isEqualTo("com.example.demo"); assertThat(pom).textAtPath("/project/groupId").isEqualTo("com.example.demo");
assertThat(pom).textAtPath("/project/artifactId").isEqualTo("demo"); assertThat(pom).textAtPath("/project/artifactId").isEqualTo("demo");
assertThat(pom).textAtPath("/project/version").isEqualTo("0.0.1-SNAPSHOT"); assertThat(pom).textAtPath("/project/version").isEqualTo("1.0.1-SNAPSHOT");
}); });
} }

View File

@@ -102,6 +102,9 @@ public abstract class AbstractProjectGenerationTester<SELF extends AbstractProje
if (projectDescription.getArtifactId() == null) { if (projectDescription.getArtifactId() == null) {
projectDescription.setArtifactId("demo"); projectDescription.setArtifactId("demo");
} }
if (projectDescription.getVersion() == null) {
projectDescription.setVersion("0.0.1-SNAPSHOT");
}
if (projectDescription.getApplicationName() == null) { if (projectDescription.getApplicationName() == null) {
projectDescription.setApplicationName("DemoApplication"); projectDescription.setApplicationName("DemoApplication");
} }

View File

@@ -66,6 +66,8 @@ public class ProjectRequestToDescriptionConverter {
description.setPackageName(getPackageName(request, metadata)); description.setPackageName(getPackageName(request, metadata));
description.setPackaging(Packaging.forId(request.getPackaging())); description.setPackaging(Packaging.forId(request.getPackaging()));
description.setPlatformVersion(Version.parse(springBootVersion)); description.setPlatformVersion(Version.parse(springBootVersion));
description.setVersion(determineValue(request.getVersion(),
() -> metadata.getVersion().getContent()));
resolvedDependencies resolvedDependencies
.forEach((dependency) -> description.addDependency(dependency.getId(), .forEach((dependency) -> description.addDependency(dependency.getId(),
MetadataBuildItemMapper.toDependency(dependency))); MetadataBuildItemMapper.toDependency(dependency)));

View File

@@ -143,6 +143,22 @@ public class ProjectRequestToDescriptionConverterTests {
assertThat(description.getArtifactId()).isEqualTo("foo"); assertThat(description.getArtifactId()).isEqualTo("foo");
} }
@Test
void convertShouldSetVersionFromRequest() {
ProjectRequest request = createProjectRequest();
request.setVersion("1.0.2-SNAPSHOT");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getVersion()).isEqualTo("1.0.2-SNAPSHOT");
}
@Test
void convertShouldUseDefaultFromMetadataOnEmptyVersion() {
ProjectRequest request = createProjectRequest();
request.setVersion(" ");
ProjectDescription description = this.converter.convert(request, this.metadata);
assertThat(description.getVersion()).isEqualTo("0.0.1-SNAPSHOT");
}
@Test @Test
void convertShouldSetBaseDirectoryFromRequest() { void convertShouldSetBaseDirectoryFromRequest() {
ProjectRequest request = createProjectRequest(); ProjectRequest request = createProjectRequest();