使用 Spring Boot 官方示例代码 rest-service 并点击 “运行”,因为 Spring Boot 内嵌了 Tomcat 模块,所以在 idea 中直接点击 Run 运行程序;有时需要部署独立外部容器中去,所以需要生成 WAR 包。
新建的项目 Build Artifacts 是灰色的,无法点击,导致无法生成 WAR 包;

在 build.gradle 文件中添加:
apply plugin: 'war'
war {
baseName = 'myapp' // war 包名
version = '0.5.0' // 版本号
}
当 Gradle 构建成功之后,Build Artifacts 会变量,此时就能生成 WAR 包了;

使用外部容器(如:Tomcat)还需要添加
providedRuntime
配置。
...
apply plugin: 'war'
war {
baseName = 'myapp'
version = '0.5.0'
}
repositories {
jcenter()
maven { url "http://repo.spring.io/libs-snapshot" }
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
...
}
此时的生成的 WAR 包在 Tomcat 中还不能正确访问,需要让 main class
main 方法所在类继承 SpringBootServletInitializer
,并重写 configure
方法,再生成 WAR 包将可在 Tomcat 中访问。
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
注意:部署到 Tomcat 以后,访问这个项目的时候,须要带上这个项目的 war 包名 + 版本名(myapp-0.5.0)。 李威威
网友评论