From 73ee6652fd2a23729443d9c3f49fae39864a1ac1 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 14 Aug 2015 17:10:21 +0200 Subject: [PATCH] Use project location to infer the artifactId On start.spring.io, if you customize the artifactId it creates a zip file with the same name. The `spring init` command did not have a similar shortcut. This commit updates the request to customize the artifactId if none is set and a custom location was specified. Just as we check for the presence of a dot to figure out if we have to extract the archive or not, we check for it to generate an artifactId without an extension. In practice, `spring init foo` creates a foo directory with a project whose artifactId is `foo` and `spring init foo.zip` stores a foo.zip file with the same project (i.e. the artifactId is `foo`). Closes gh-3714 --- .../init/ProjectGenerationRequest.java | 20 +++++++++-- .../init/ProjectGenerationRequestTests.java | 33 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ProjectGenerationRequest.java b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ProjectGenerationRequest.java index 2ce8b6328e..639e9b4581 100644 --- a/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ProjectGenerationRequest.java +++ b/spring-boot-cli/src/main/java/org/springframework/boot/cli/command/init/ProjectGenerationRequest.java @@ -324,8 +324,9 @@ class ProjectGenerationRequest { if (this.groupId != null) { builder.setParameter("groupId", this.groupId); } - if (this.artifactId != null) { - builder.setParameter("artifactId", this.artifactId); + String resolvedArtifactId = resolveArtifactId(); + if (resolvedArtifactId != null) { + builder.setParameter("artifactId", resolvedArtifactId); } if (this.version != null) { builder.setParameter("version", this.version); @@ -405,6 +406,21 @@ class ProjectGenerationRequest { } } + /** + * Resolve the artifactId to use or {@code null} if it should not be customized. + * @return the artifactId + */ + protected String resolveArtifactId() { + if (this.artifactId != null) { + return this.artifactId; + } + if (this.output != null) { + int i = this.output.lastIndexOf('.'); + return (i == -1 ? this.output : this.output.substring(0, i)); + } + return null; + } + private static void filter(Map projects, String tag, String tagValue) { for (Iterator> it = projects.entrySet().iterator(); it diff --git a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/init/ProjectGenerationRequestTests.java b/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/init/ProjectGenerationRequestTests.java index 9374b990aa..7870260155 100644 --- a/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/init/ProjectGenerationRequestTests.java +++ b/spring-boot-cli/src/test/java/org/springframework/boot/cli/command/init/ProjectGenerationRequestTests.java @@ -139,6 +139,39 @@ public class ProjectGenerationRequestTests { this.request.generateUrl(createDefaultMetadata())); } + @Test + public void outputCustomizeArtifactId() { + this.request.setOutput("my-project"); + assertEquals( + createDefaultUrl("?artifactId=my-project&type=test-type"), + this.request.generateUrl(createDefaultMetadata())); + } + + @Test + public void outputArchiveCustomizeArtifactId() { + this.request.setOutput("my-project.zip"); + assertEquals( + createDefaultUrl("?artifactId=my-project&type=test-type"), + this.request.generateUrl(createDefaultMetadata())); + } + + @Test + public void outputArchiveWithDotsCustomizeArtifactId() { + this.request.setOutput("my.nice.project.zip"); + assertEquals( + createDefaultUrl("?artifactId=my.nice.project&type=test-type"), + this.request.generateUrl(createDefaultMetadata())); + } + + @Test + public void outputDoesNotOverrideCustomArtifactId() { + this.request.setOutput("my-project"); + this.request.setArtifactId("my-id"); + assertEquals( + createDefaultUrl("?artifactId=my-id&type=test-type"), + this.request.generateUrl(createDefaultMetadata())); + } + @Test public void buildNoMatch() { InitializrServiceMetadata metadata = readMetadata();