http://jacksonlhj.cn/articles/2022/03/02/1646232487690.html
序言
因为公司需求需要打包成War部署,记录一下当时部署遇到的坑。
通常部署springboot项目都是打包成jar包或者war包两种方式。
服务器操做系统:windows
Don’t say too much,let get it!
一、jar包
需要在pom.xml中修改打包方式
<packaging>jar</packaging>
然后打开Maven点击package即可生成jar包。(前提idea已配置Maven)
把jar包放到服务器中,命令行指定到该jar的位置,执行一下命令即可。
该命令窗台关闭后,项目也会关闭。
java -jar xxxx.jar
后台运行命令,窗口关闭也不会关闭项目,要关闭执行杀死该进程的命令即可。(记住启动时的PID)
java -jar xxxx.jar > log.file 2>&1 &
二、war包
1、修改pom.xml
打包方式修改成war
<packaging>war</packaging>
添加以下引用
<!--若使用外部tomcat加入该引用-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--若使用到servlet加入该引用-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
2、修改SpringBoot启动类
import org.mybatis.spring.annotation.MapperScan;
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
@MapperScan(value = "com.Test.mapper")
public class PackinglistApplication extends SpringBootServletInitializer{// 若使用外部tomcat加上该代码
/**
* 若使用外部tomcat加上该代码
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(PackinglistApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(PackinglistApplication.class, args);
}
}
执行maven clean 和 maven package命令
生成war包后,可以在项目上的target文件夹中找到,自己可以重命名,最后放到自己tomcat服务器中的webapp下运行即可。
当时在服务器tomcat中部署报以下错误:
Caused by: java.lang.UnsupportedClassVersionError: org/springframework/web/SpringServletContainerInitializer : Unsupported major.minor version 52.0 (unable to load class [org.springframework.web.SpringServletContainerInitializer])
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2404)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:859)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1185)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.apache.catalina.startup.WebappServiceLoader.loadServices(WebappServiceLoader.java:188)
at org.apache.catalina.startup.WebappServiceLoader.load(WebappServiceLoader.java:159)
at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1622)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1129)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:769)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5134)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more
Unsupported major.minor version 52.0
原因是springboot与jdk版本不匹配,我在本地环境是springboot是2.0,jdk1.8运行是没有问题的,但服务器上的jdk是1.7的,所以报该错误。