Exception in thread "main" java.lang.UnsupportedClassVersionError: M : Unsupported major.minor version
在linux上编译的java程序,在运行的时候报这个错误。
经过查找原来是javac的版本和java的版本不一致导致的,
因为我机器上安装了系统自带的java-1.5.0-gcj和1.7.0的openjdk,另外我还自己安装了1.8.0的Oracle 官方的jdk
导致编译器的版本和运行器的版本不一致。
解决这个问题的方法是使用alternatives 切换默认的java命令
这个工具的大概原理是
在/usr/bin目录下创建一个符号链接,指向/etc/alternatives/ 下的的文件,而该文件依然是一个符号链接,举个栗子
/etc/alternatives/java会指向最终的可执行文件,如果你有3个版本的java
就需要运行
然后选择你想要选择的选项保存就好了
如果这个列表里面没有你想要的而且已经安装了的程序,就需要添加 命令为
这个命令实际操作的是 /var/lib/alternatives目录下对应的文件
alternatives的安装删除显示等操作都是通过读取和修改这个目录下的文件实现的,而且是文本文件,感兴趣的可以取阅读一下
=============================================================
另外,/etc/profile中path的设置,可以选择覆盖或不覆盖/usr/bin/java命令。
如果我这样设置profile,那么会使用jdk1.5 :
#set java environment
JAVA_HOME=/home/wuekzhu/download/jdk1.5.0_22
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
如果我这样设置profile,那么会使用/usr/bin/java - > /etc/alternatives/java :
#set java environment
JAVA_HOME=/home/wuekzhu/download/jdk1.5.0_22
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$PATH: $JAVA_HOME/bin