背景

使用java -jar的方式将maven项目部署到linux平台(虚拟机)下,报出异常Exception in thread "main" java.lang.UnsupportedClassVersionError。

项目部署过程

一、项目打包:

使用如下命令对项目打包:

D:\sell>mvn clean package -Dmaven.test.skip=true

打包成功:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
在pom.xml文件里添加以修改包的名字:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
重新打包,可以看到包名已经被修改:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

二、部署

使用如下命令将项目部署到linux平台(虚拟机)指定目录/opt/javaapps下:

scp target/sell.jar root@10.3.11.185:/opt/javaapps

Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
在虚拟机项目目录下启动项目:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
项目报异常:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

三、发现异常

检查linux平台的java版本:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

检查linux平台的javac版本:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

java版本是一致的,没有问题,然后检查maven项目所要求的java版本,进入pom.xml文件中查看:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

发现maven项目中jdk是11的,而linux平台上是1.8的,两者不匹配才导致上述异常。

四、解决

将maven项目中JDK版本改成1.8.如下:

<properties>
    <java.version>1.8</java.version>
</properties>

删除掉linux平台下刚才上传的异常文件:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

重新将项目打包上传,然后就可以成功启动了。

五、后续

改了JDK版本号重新上传运行,项目报了新的异常,提示8080端口被占用:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

解决
  1. 首先用如下命令查看占用8080端口的进程:
netstat -lnp|grep 80

Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
然后使用如下命令杀掉占用端口的进程:

kill -9 1471
kill -9 970

确认进程是否已被关闭:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
重新启动,可以发现项目启动成功:
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use
Linux平台部署maven项目,报异常Exception in thread "main" java.lang.UnsupportedClassVersionError和Web server failed to start. Port 8080 was already in use

注意:上述命令是linux下的。windows下用以下命令查看占用8080端口的进程和杀掉占用端口的进程:

netstat -ano|findstr "8080"    //查询
tskill 3500     //杀掉进程

相关文章: