背景:现在手上的项目基本进入收尾期,有必要将前后端的项目打成包丢到服务器上的docker进行测试了。

springboot默认的打包方式为jar包,jar包的有优点是不需要更改的配置,并且内嵌了tomcat,如果打成jar包直接可以丢到docker中运行测试。但是考虑到前端代码只能打成war包,因此干脆也将后端代码打成war包和前端的代码一起放在tomcat容器中的webapps中运行就好了。这样也易于维护。

在后端代码达成war包的过程中遇到了几个坑,通过在网上搜索相关文章慢慢摸索成功打包发布,在此记录一下主要的打包步骤,给之后的自己和有需要的你作为参考。

 1:添加tomcat依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>compile</scope>
</dependency>

这一步是我遇到的第一个坑,当时按照相关的文章介绍,将spring-boot-starter-tomcat从web依赖中去掉。也就是像下面这样:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<!--<exclusions>-->
		<!--<exclusion>-->
			<!--<groupId>org.springframework.boot</groupId>-->
			<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
		<!--</exclusion>-->
	<!--</exclusions>-->
</dependency>

如上图所示 我已经将去除的那段代码注释掉了。当时编译一直报错。因为我就没有去除而是直接在下面另外添加了tomcat相关的依赖了。

 

2:将jar包修改成war包

<packaging>war</packaging>

 

3: 添加servlet相关依赖

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>3.1.0</version>
	<scope>provided</scope>
</dependency>

 

4:修改启动类

package com.ahu.lock;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class LockApplication extends SpringBootServletInitializer {
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(LockApplication.class);
	}

	public static void main(String[] args) {
		SpringApplication.run(LockApplication.class, args);
	}
}

 

 5:定义最后生成war包的名称

<build>
 <finalName>lock</finalName>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
    </plugins>
</build>

用finalName定义最后输出的war包的名称。

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐