Fix generation of war project with Spring Boot 2+

As of Spring Boot 2.0.0.M1, the SpringBootServletInitializer class has
been relocated to the support package. This commit fixes the generation
of war project as of that version.

Closes gh-502
This commit is contained in:
Stephane Nicoll 2017-09-07 09:01:19 +02:00
parent afe9d6664f
commit 9976d8e20d
8 changed files with 63 additions and 25 deletions

View File

@ -434,8 +434,9 @@ public class ProjectGenerator {
// New testing stuff
model.put("newTestInfrastructure", isNewTestInfrastructureAvailable(request));
// New Servlet Initializer location
model.put("newServletInitializer", isNewServletInitializerAvailable(request));
// Servlet Initializer
model.put("servletInitializrImport", generateImport(getServletInitializrClass(request),
request.getLanguage()));
// Java versions
model.put("isJava6", isJavaVersion(request, "1.6"));
@ -512,6 +513,19 @@ public class ProjectGenerator {
model.put("testAnnotations", testAnnotations);
}
protected String getServletInitializrClass(ProjectRequest request) {
Version bootVersion = Version.safeParse(request.getBootVersion());
if (VERSION_1_4_0_M3.compareTo(bootVersion) > 0) {
return "org.springframework.boot.context.web.SpringBootServletInitializer";
}
else if (VERSION_2_0_0_M1.compareTo(bootVersion) > 0) {
return "org.springframework.boot.web.support.SpringBootServletInitializer";
}
else {
return "org.springframework.boot.web.servlet.support.SpringBootServletInitializer";
}
}
protected String generateImport(String type, String language) {
String end = ("groovy".equals(language) || "kotlin".equals(language)) ? "" : ";";
return "import " + type + end;
@ -534,11 +548,6 @@ public class ProjectGenerator {
.compareTo(Version.safeParse(request.getBootVersion())) <= 0;
}
private static boolean isNewServletInitializerAvailable(ProjectRequest request) {
return VERSION_1_4_0_M3
.compareTo(Version.safeParse(request.getBootVersion())) <= 0;
}
private static boolean isGradle3Available(Version bootVersion) {
return VERSION_1_5_0_M1.compareTo(bootVersion) <= 0;
}

View File

@ -1,12 +1,7 @@
package {{packageName}}
import org.springframework.boot.builder.SpringApplicationBuilder
{{#newServletInitializer}}
import org.springframework.boot.web.support.SpringBootServletInitializer
{{/newServletInitializer}}
{{^newServletInitializer}}
import org.springframework.boot.context.web.SpringBootServletInitializer
{{/newServletInitializer}}
{{servletInitializrImport}}
class ServletInitializer extends SpringBootServletInitializer {

View File

@ -1,12 +1,7 @@
package {{packageName}};
import org.springframework.boot.builder.SpringApplicationBuilder;
{{#newServletInitializer}}
import org.springframework.boot.web.support.SpringBootServletInitializer;
{{/newServletInitializer}}
{{^newServletInitializer}}
import org.springframework.boot.context.web.SpringBootServletInitializer;
{{/newServletInitializer}}
{{servletInitializrImport}}
public class ServletInitializer extends SpringBootServletInitializer {

View File

@ -1,12 +1,7 @@
package {{packageName}}
import org.springframework.boot.builder.SpringApplicationBuilder
{{#newServletInitializer}}
import org.springframework.boot.web.support.SpringBootServletInitializer
{{/newServletInitializer}}
{{^newServletInitializer}}
import org.springframework.boot.context.web.SpringBootServletInitializer
{{/newServletInitializer}}
{{servletInitializrImport}}
class ServletInitializer : SpringBootServletInitializer() {

View File

@ -120,6 +120,12 @@ public class ProjectGeneratorLanguageTests extends AbstractProjectGeneratorTests
testServletInitializr("1.4.0.M3", "spring-boot-1.4");
}
@Test
public void springBoot2ServletInitializer() {
testServletInitializr("2.0.0.M3", "spring-boot-2.0");
}
private void testServletInitializr(String bootVersion, String expectedOutput) {
ProjectRequest request = createProjectRequest();
request.setLanguage(language);

View File

@ -0,0 +1,13 @@
package com.example.demo
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
application.sources(DemoApplication)
}
}

View File

@ -0,0 +1,13 @@
package com.example.demo;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
}

View File

@ -0,0 +1,12 @@
package com.example.demo
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
class ServletInitializer : SpringBootServletInitializer() {
override fun configure(application: SpringApplicationBuilder) : SpringApplicationBuilder {
return application.sources(DemoApplication::class.java)
}
}