分析并解决Linux发行版的自带OpenJdk和自己安装的OracleJdk新旧版本冲突问题

发行版系统:Deepin15.9 (为什么?漂亮不折腾)

一直知道这个情况,但使用正常就没去理他,直到今天:

VSCode给我报了个错误 

 

1 cd "/home/××/Documents/0vscode/java/" && javac -encoding UTF-8 MidiDance1.java && java MidiDance1
2 
3 Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
4 Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
5 Error: LinkageError occurred while loading main class MidiDance1
6         java.lang.UnsupportedClassVersionError: MidiDance1 has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 54.0
报错

 所以解决它...

 百分百确定是Openjdk自带的jre和Oracle的冲突,看这里:

$ sudo update-alternatives --config java
[sudo] ×× 的密码:
链接组 java (提供 /usr/bin/java)中只有一个候选项:/usr/lib/jvm/java-10-openjdk-amd64/bin/java
无需配置。

$ ls /usr/lib/jvm/
default-java   java-10-openjdk-amd64    java-1.10.0-openjdk-amd64    jdk-11.0.2

其中jdk-11.0.2 是我自己装的OracleJdk目录

可知系统是默认配置一个openjdk的jre环境了

// 问题应该在这个目录,进去看看
$ cd /usr/lib/jvm/

// default这个目录有点默认使用的意味,ls详细看看

$ ls -l default-java/bin/ 总用量 216 -rwxr-xr-x 1 root root 10520 5月 6 2018 java -rwxr-xr-x 1 root root 10600 5月 6 2018 jjs -rwxr-xr-x 1 root root 10560 5月 6 2018 keytool -rwxr-xr-x 1 root root 10608 5月 6 2018 orbd -rwxr-xr-x 1 root root 10560 5月 6 2018 pack200 -rwxr-xr-x 1 root root 10552 5月 6 2018 rmid -rwxr-xr-x 1 root root 10560 5月 6 2018 rmiregistry -rwxr-xr-x 1 root root 10560 5月 6 2018 servertool -rwxr-xr-x 1 root root 10616 5月 6 2018 tnameserv -rwxr-xr-x 1 root root 107920 5月 6 2018 unpack200

文件权限之后的数字代表类型,1是link文件链接类型,

也就是说系统默认使用了这个链接,所以也就印证了VSCode里调用的报错。

 那更改java链接就行了?等等,看清楚点比较好

$ ls -l default-java
lrwxrwxrwx 1 root root 25 5月   1  2018 default-java -> java-1.10.0-openjdk-amd64

原来这个default-java才是一个链接

$ ls -l java-1.10.0-openjdk-amd64
lrwxrwxrwx 1 root root 21 5月   6  2018 java-1.10.0-openjdk-amd64 -> java-10-openjdk-amd64

等等....这....看来得把所有主要目录都列出来

$ ls -l 
总用量 8
lrwxrwxrwx 1 root root   25 5月   1  2018 default-java -> java-1.10.0-openjdk-amd64
drwxr-xr-x 7 root root 4096 1月  24 15:41 java-10-openjdk-amd64
lrwxrwxrwx 1 root root   21 5月   6  2018 java-1.10.0-openjdk-amd64 -> java-10-openjdk-amd64
drwxr-xr-x 8  668  668 4096 1月  22 10:47 jdk-11.0.2

所以看懂了,为什么这么蛋疼的链接呢?那肯定是为了兼容性,查了一下: jdk10 也叫 jdk1.10   (目前 jdkxx 都叫 jdk1.xx)

 Ps. 闲的没事多 ls -l 会有很多发现

原因找到了,那我们就依样画葫芦解决它吧。

解决方案:

猜你喜欢

转载自www.cnblogs.com/yucloud/p/Open-Oracle_Linux.html