解决办法:

从Oraclejdk 目录里可执行文件链接都复制到自己的LINK目录,然后IDE使用LINK变量下的命令

本文没有具体解决方法,只有探索思路................................

如果想替换系统openjdk,请参考:

Linux(Deepin)下配置java8 - L141210113的专栏 - CSDN博客(不过官网jdk8现在需要登录才能下载,jdk11、12不用登录)

以下为过程思路:

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

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

VSCode给我报了个错误

 cd "/home/××/Documents/0vscode/java/" && javac -encoding UTF- MidiDance1.java && java MidiDance1

 Picked up _JAVA_OPTIONS:   -Dawt.useSystemAAFontSettings=gasp
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
Error: LinkageError occurred while loading main class MidiDance1
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--openjdk-amd64 java-1.10.-openjdk-amd64 jdk-11.0.

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

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

// 问题应该在这个目录,进去看看
$ cd /usr/lib/jvm/ // default这个目录有点默认使用的意味,ls详细看看 $ ls -l default-java/bin/
总用量
-rwxr-xr-x root root 5月 java
-rwxr-xr-x root root 5月 jjs
-rwxr-xr-x root root 5月 keytool
-rwxr-xr-x root root 5月 orbd
-rwxr-xr-x root root 5月 pack200
-rwxr-xr-x root root 5月 rmid
-rwxr-xr-x root root 5月 rmiregistry
-rwxr-xr-x root root 5月 servertool
-rwxr-xr-x root root 5月 tnameserv
-rwxr-xr-x root root 5月 unpack200

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

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

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

$ ls -l default-java
lrwxrwxrwx root root 5月 default-java -> java-1.10.-openjdk-amd64

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

$ ls -l java-1.10.-openjdk-amd64
lrwxrwxrwx root root 5月 java-1.10.-openjdk-amd64 -> java--openjdk-amd64

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

$ ls -l
总用量
lrwxrwxrwx root root 5月 default-java -> java-1.10.-openjdk-amd64
drwxr-xr-x root root 1月 : java--openjdk-amd64
lrwxrwxrwx root root 5月 java-1.10.-openjdk-amd64 -> java--openjdk-amd64
drwxr-xr-x 1月 : jdk-11.0.

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

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

然后找出 全局可执行命令“java” 的位置

$ type java
java 是 /usr/bin/java $ which java
/usr/bin/java $ whereis java
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/jdk-11.0./bin/java /usr/share/man/man1/java..gz $ whereis -b java
java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/jdk-11.0./bin/java

得出位置是/usr/bin/ ,那ls一下

$ ls -l /usr/bin/ | grep java
lrwxrwxrwx root root 1月 : java -> /etc/alternatives/java

蛋疼得受不了了,继续ls

$ ls -l | grep java
lrwxrwxrwx root root 1月 : java -> /usr/lib/jvm/java--openjdk-amd64/bin/java
lrwxrwxrwx root root 1月 : java..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/java..gz
lrwxrwxrwx root root 1月 : jexec -> /usr/lib/jvm/java--openjdk-amd64/lib/jexec
lrwxrwxrwx root root 1月 : jexec-binfmt -> /usr/lib/jvm/java--openjdk-amd64/lib/jar.binfmt
lrwxrwxrwx root root 1月 : jjs -> /usr/lib/jvm/java--openjdk-amd64/bin/jjs
lrwxrwxrwx root root 1月 : jjs..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/jjs..gz
lrwxrwxrwx root root 1月 : keytool -> /usr/lib/jvm/java--openjdk-amd64/bin/keytool
lrwxrwxrwx root root 1月 : keytool..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/keytool..gz
lrwxrwxrwx root root 1月 : orbd -> /usr/lib/jvm/java--openjdk-amd64/bin/orbd
lrwxrwxrwx root root 1月 : orbd..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/orbd..gz
lrwxrwxrwx root root 1月 : pack200 -> /usr/lib/jvm/java--openjdk-amd64/bin/pack200
lrwxrwxrwx root root 1月 : pack200..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/pack200..gz
lrwxrwxrwx root root 1月 : rmid -> /usr/lib/jvm/java--openjdk-amd64/bin/rmid
lrwxrwxrwx root root 1月 : rmid..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/rmid..gz
lrwxrwxrwx root root 1月 : rmiregistry -> /usr/lib/jvm/java--openjdk-amd64/bin/rmiregistry
lrwxrwxrwx root root 1月 : rmiregistry..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/rmiregistry..gz
lrwxrwxrwx root root 1月 : servertool -> /usr/lib/jvm/java--openjdk-amd64/bin/servertool
lrwxrwxrwx root root 1月 : servertool..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/servertool..gz
lrwxrwxrwx root root 1月 : tnameserv -> /usr/lib/jvm/java--openjdk-amd64/bin/tnameserv
lrwxrwxrwx root root 1月 : tnameserv..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/tnameserv..gz
lrwxrwxrwx root root 1月 : unpack200 -> /usr/lib/jvm/java--openjdk-amd64/bin/unpack200
lrwxrwxrwx root root 1月 : unpack200..gz -> /usr/lib/jvm/java--openjdk-amd64/man/man1/unpack200..gz

原来bin路径下都是链接,我....

赶紧必应搜索多几下

linux中如何查看命令所在目录_百度经验

原因找到了,那我们就.... Linux不太可能给你集成你用不到的功能,所以Openjdk应该和系统相关,不能卸载作死...

解决方案:

我们只是用IDE编程时运行一下,还是在IDE里改吧,

先看一下自己安装的jdk目录

:/usr/lib/jvm/jdk-11.0./bin$ ls -l
总用量
-rwxr-xr-x 1月 : jaotc
-rwxr-xr-x 1月 : jar
-rwxr-xr-x 1月 : jarsigner
-rwxr-xr-x 1月 : java
-rwxr-xr-x 1月 : javac
-rwxr-xr-x 1月 : javadoc
-rwxr-xr-x 1月 : javap
-rwxr-xr-x 1月 : jcmd
-rwxr-xr-x 1月 : jconsole
-rwxr-xr-x 1月 : jdb
-rwxr-xr-x 1月 : jdeprscan
-rwxr-xr-x 1月 : jdeps
-rwxr-xr-x 1月 : jhsdb
-rwxr-xr-x 1月 : jimage
-rwxr-xr-x 1月 : jinfo
-rwxr-xr-x 1月 : jjs
-rwxr-xr-x 1月 : jlink
-rwxr-xr-x 1月 : jmap
-rwxr-xr-x 1月 : jmod
-rwxr-xr-x 1月 : jps
-rwxr-xr-x 1月 : jrunscript
-rwxr-xr-x 1月 : jshell
-rwxr-xr-x 1月 : jstack
-rwxr-xr-x 1月 : jstat
-rwxr-xr-x 1月 : jstatd
-rwxr-xr-x 1月 : keytool
-rwxr-xr-x 1月 : pack200
-rwxr-xr-x 1月 : rmic
-rwxr-xr-x 1月 : rmid
-rwxr-xr-x 1月 : rmiregistry
-rwxr-xr-x 1月 : serialver
-rwxr-xr-x 1月 : unpack200

和系统Openjdk结构差不多,bin目录下都是可执行文件的链接

Linux下的softlink和hardlink - yasaken - CSDN博客

具体解决方案:

从安装的Oraclejdk 目录里找可执行文件链接所在的bin目录,把bin目录下的链接文件copy到自己的javaLinkBin目录下

把可执行链接都复制到自己的目录:

/usr/lib/jvm/jdk-11.0.$  cp bin/* /home/xx/Documents/javaLinkBin/

然后把IDE里调用jdk的命令都加上完整路径,

修改IDE里的运行命令如:

java    改为   /home/xx/Document/javaLinkBin/java

javac    改为   /home/xx/Document/javaLinkBin/javac

当然更好的方法是设置一个变量,例如

MY_JDKLINK="/home/xx/Document/javaLinkBin/"

然后IDE配置写 $MY_JDKLINK/java即可

         -End-

Ps.最近百度挺讨厌的,还我必应主域名,不还就用官方第二域名:https://www2.bing.com     https://www4.bing.com

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

  1. Linux发行版及其目标用户

    1.Debian Debian 众所周知,是Deepin,Ubuntu和Mint等流行Linux发行版的母亲,这些发行版提供了可靠的性能,稳定性和无与伦比的用户体验.最新的稳定发行版是Debian 1 ...

  2. 常见Linux发行版有哪些?

    Linux 发行版(英语:Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件.一般用户不需要重新编译,在直接安装之后,只 ...

  3. Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版

    嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...

  4. 最佳 Linux 发行版汇总

    Linux入门UbuntuUbuntu是一款基于Debian发行版,以Unity作为默认桌面环境的Linux操作系统.他是世界上最流行的发行版之一,每次发行,它都有提升.最新发行版为桌面.移动及其桌面 ...

  5. 全球最受欢迎的十大Linux发行版(图)

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

  6. LFS 中文版手册发布:如何打造自己的 Linux 发行版

    您是否想过打造您自己的 Linux 发行版?每个 Linux 用户在他们使用 Linux 的过程中都想过做一个他们自己的发行版,至少一次.我也不例外,作为一个 Linux 菜鸟,我也考虑过开发一个自己 ...

  7. 顺手的Linux发行版及其工具推荐

    从Windows切换到Linux已经有半年多的时间了,简单给大家推荐一些个人感觉不错的软件,主要都是和开发相关的通用软件--- 0.archlinux  挑一个比较顺手的linux发行版当然是首要任务 ...

  8. Linux 桌面玩家指南:11. 在同一个硬盘上安装多个 Linux 发行版以及为 Linux 安装 Nvidia 显卡驱动

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  9. 什么是 Linux 发行版

    什么是Linux的发行版 就Linux的本质来说,它只是操作系统的核心,负责控制硬件.管理文件系统.程序进程等,并不给用户提供各种工具和应用软件.所谓工欲善其事,被必先利其器,一套在优秀的操作系统核心 ...

随机推荐

  1. js Iframe与父级页面通信及IE9-兼容性

    一. postMessage window.postMessage()方法安全地启用Window对象之间的跨源通信:例如,在页面和它产生的弹出窗口之间,或者在页面和嵌入其中的iframe之间. 二.语 ...

  2. 截图自动添加水印图片工具 pickpick设置中文语言

    推荐一款截图工具,主要是可以截图自动带水印,效果不错 最近发现我的不少文章被转载的到处都是.乱七八糟,这个功能后续准备做个水印用起来,感觉不错 主角介绍 首先介绍下主角 PickPick

  3. 汇总Anaconda与ROS冲突解决方法

    汇总一下在网上找到的Anaconda与ROS冲突解决方法,如果还有其他人找到其他方法,欢迎留言. anaconda和ros的安装就不介绍了. 1. 在某视频网站上一个印度小哥提出的方法 安装完成后,在 ...

  4. IDA分析时添加新的C语言结构体

    View - Open Subviews - Local Type - INSERT键 - 输入新结构体 - 右击"Synchornize to idb" 之后再分析处按 T 就可 ...

  5. ElasticSearch简介(一)——基础

    基本概念 1.  Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例. 单个 Elastic 实例称为一个节点 ...

  6. 深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式—兼BLE Link layer协议解析https://www.cn ...

  7. Python实现MQTT接收订阅数据

    一.背景 目前MQTT的标准组织官网:http://www.mqtt.org,里面列出了很多支持的软件相关资源. 一个轻量级的MQTT服务器是:http://www.mosquitto.org,可以运 ...

  8. [TCP/IP] ping traceroute和TTL

    1.Time To Live是生存时间的意思,就是说这个ping的数据包能在网络上存在多少时间.当我们对网络上的主机进行ping操作的时候,我们本地机器会发出一个数据包,数据包经过一定数量的路由器传送 ...

  9. 为何JAVAWEB绝对路径访问不了图片

    为何JAVAWEB绝对路径访问不了图片?其实这涉及到两个原因 1:浏览器类型不同: 五大主流浏览器内核有所不同,能够支持的功能不一样:如谷歌浏览器就不能查看绝对路径 2:涉及到保护隐私安全: (谷歌浏 ...

  10. python 正则表达式提取返回内容

    import re re.findall(' <input name="address_id" type="hidden" value="(.* ...