项目开始是用java8的环境开发的Springboot项目,部署时才知道现场安装的是jdk1.7,且需要将项目打成war包放在tomcat7.0下运行。最近部署遇到了一些问题,这里将解决方案记录一下:
一、Springboot项目如何打war包
1、更改pom文件中的打包方式
在dependencies标签同级位置增加
<packaging>war</packaging>
2、去掉springboot默认的内置tomcat
<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>
3、在项目启动类所在目录增加外置启动类, 默认的启动类要继承SpringBootServletInitiailzer类,并复写configure()方法。
package com.ieslab.powertrace;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @description:
* @author: yiwenli
* @create: 2021-11-18 14:53
**/
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(XXXApplication.class);
}
}
二、Springboot项目如何降低jdk版本
1、修改IDEA中配置的软件开发工具包
打开项目结构,修改Modules下的Module SDK为1.7
2、修改IDEA中配置的java编译使用版本
打开设置,修改Java Compiler中对应Module的Target bytecode version
3、如果代码中使用java8的新特性,比如函数式编程,那需要将代码中用到的java8语法改成8以下版本可用的语法。
4、修改pom文件中的java版本、tomcat版本
<properties>
<java.version>1.7</java.version>
<tomcat.version>7.0.73</tomcat.version>
</properties>
5、修改maven-compiler-plugin插件配置!!!
这一步要注意。
这个插件是用来告诉代码用什么版本的jdk编译的,如果不注意会很容易出现版本不匹配的问题,导致编译不通过。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>7</source>
<target>7</target>
</configuration>
</plugin>
6、降低springboot版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/>
</parent>
7、降低springboot版本后 可能有些类的引用发生了改变 这里需要改一下 重新import。
8、上述步骤完成后,启动项目应该可以启动成功,这时需要再测试一下功能是否均可正常使用。
可能遇到的错误
java.lang.UnsupportedClassVersionError:Unsupported major.minor version 52.0
此错误为不支持类版本错误,可能是因为不同的JDK版本编译出的class文件可能会有差异 高版本 JDK能够兼容低版本JDK自然没问题,反之就会出现问题。
java主要版本分配的数字如下:
9 = 53
8 = 52
7 = 51
6.0 = 50
所以可能是项目中引用了其他用java8版本编译的jar包。这里就根据日志找该jar就行。
11:14:57.427 [http-bio-8080-exec-6] ERROR org.springframework.boot.web.support.ErrorPageFilter - Forwarding to error page from request [/xx/xx] due to exception [org/apache/commons/lang3/StringUtils : Unsupported major.minor version 52.0 (unable to load class org.apache.commons.lang3.StringUtils)]
java.lang.UnsupportedClassVersionError: org/apache/commons/lang3/StringUtils : Unsupported major.minor version 52.0 (unable to load class org.apache.commons.lang3.StringUtils)