说明
- 如何在idea下利用maven打包war包
- 如何在发布war包到外部tomcat容器时,剔除内嵌的tomcat(否则404)
- 在本地idea执行时用内嵌的tomcat,当打包时剔除内嵌tomcat,这样才完美
操作1 idea下利用maven打包war包
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>ROOT</finalName>
</build>
- 引入maven打包插件
- 配置packaging标签,这里war表示打包成war包。jar表示打包成jar包。
- 指定生成war包的名字,finalName指定名字
- clean + install 打包(idea右侧有maven工具栏)
打包好后,在项目target目录下生成xx.war包。默认包含内嵌tomcat,所以可以通过java -jar xx.war命令直接运行服务。但缺点在于,如果放到独立的tomcat中可以正常启动,但是无法访问路径,报404错误。
操作2 打包时剔除内嵌的tomcat
https://www.cnblogs.com/jpfss/p/9042249.html
step1 编写一个ApiServletInitializer 类copy下面内容。xxxxx代表你的启动类名
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* web容器中进行部署
*
* @author bian
*/
public class ApiServletInitializer extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(xxxxx.class);
}
}
step2 pom文件中添加如下内容
<!--声明spring boot内嵌tomcat的作用范围 在运行时不起作用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
然后打包时就可以剔除tomcat
操作3 在本地idea执行时用内嵌的tomcat,当打包时剔除内嵌tomcat
经测试操作2中只做step1即可,即只需添加下面的类到服务即可。我在springboot2.0中验证,可以保持两者兼得。
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* web容器中进行部署
*
* @author bian
*/
public class ApiServletInitializer extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(xxxxx.class);
}
}
总结
时代在变化,可以用最简单的方式解决问题