记一次Unsupported major.minor version 52.0问题的解决

记一次Unsupported major.minor version 52.0问题的解决

  • 问题描述
  • 问题解决
  • 总结

问题描述

目前项目几个模块在linux上运行,在通过jenkins自动化打包部署时,发现远程调用启动脚本报Unsupported major.minor version 52.0错误;但是通过相同用户登录服务器之后手工调用启动脚本,启动正常;

问题解决

  1. 核对pom.xml文件中的jdk编译版本,发现版本配置均为1.8:

     
     	org.apache.maven.plugins                                                                                               
     	maven-compiler-plugin                                                                                            
     	3.1                                                                                                                    
     	                                                                                                                           
     		1.8                                                                                            
     		1.8                                                                                  
     		UTF-8
     	
     
    
  2. 排查服务器java版本及环境变量配置

	[root@localhost appsystems] #      java -version
	java version "1.8.0_111"
	Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
	Java HostSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

	[root@localhost appsystems] # view /etc/profile 
	JAVA_HOME=/usr/lib/jdk1.8.0_101
	CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 
	PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH

  1. 以上配置均正常,排查远程启动是否会引用其他版本的jdk问题,在如下一篇文章中找到答案:
    https://blog.csdn.net/gaoshan_820822/article/details/86677340
    远程启动时会默认采用/usr/bin/java这个java链接,因此看下这个链接的指向
   	[root@localhost appsystems] # ls -l /usr/bin
	 /usr/bin/java -> /etc/alternatives/java
	[root@localhost appsystems] # ls -l /etc/alternatives/java
	/etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

	

  1. 经排查,/usr/bin/java这个软连接指向的是一个低版本的jdk,因此修改指向,并重新远程启动,启动成功
	[root@localhost appsystems] # rm -f /etc/alternatives/java
	[root@localhost appsystems] # ln -s /usr/lib/jdk1.8.0_111 /etc/alternatives/java

总结

1、解决过程中其实还绕了不少弯路,当中甚至还找了公司的部署团队及中间件同事帮忙查看,但都未看出问题所在;
2、其实看到这个问题应该知道是编译jdk版本与服务器运行jre环境不一致,因此只要查看下服务启动过程中使用到的jre环境即可知道问题所在,且本项目中存在一个web项目是可以看到启动时的jre版本的,但是均未注意到;
3、至于为什么远程调用采用的是/usr/bin下的java,这个机制确实还不太清楚;

你可能感兴趣的:(java)