解决办法:

从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. mysql count的理解

    mysql count的理解 1 select count(tel) as telcount from info;如果tel列有null 将不会被统计进去 2 count(*) 这样写性能更好 3 M ...

  2. PhaseScorer:感慨高手写的代码就是精炼

    看懂了PhaseScorer的算法后,回想起前面看的算法和代码,感慨高手写的代码总是那么精炼,没有一句废话,多一句不行,少一句不行.明天来了写下PhaseScorer算法的实现:todo

  3. SharpGL之Viewport

    视口变换主是将视景体内投影的物体显示到二维的视口平面上. 在计算机图形学中,它的定义是将经过几何变换, 投影变换和裁剪变换后的物体显示于屏幕指定区域内. 前面我们讨论过的透视投影, 正射投影, 它们都 ...

  4. Vue-组件模板抽离的写法

    VUE的模板分离写法. 1.第一种(不常用) <script type="text/x-template" id="myCpm"> <div& ...

  5. 【设计模式】Prototype

    前言 这篇讲设计模式的部分相对较少.Prototype设计模式,它提供一种复制对象的思路.使用Prototype就可以在不需要了解类结构的前提下,复制一个现有对象.写了一个代码片段,讲解使用Objec ...

  6. 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...

  7. 从未被Google过 #NerverBeenGoogled

    我相信大家都用Google搜索互联网上的东西,Google会跟踪你搜索的所有内容,但是你或许不知道,他们也记录着从未被Google过的内容.我有个清单,这些是有史以来从未被Google过的一些东西1. ...

  8. ajax的jQuery的表单序列化获取参数serialize()

    需要引入jQuery.js才能使用$("form表单的id").serialize()可获取form表单里面所有表单元素的值和name属性值,按顺序拼接成查询字符串格式为name值 ...

  9. 强大的 strace 工具

    什么是 strace strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用. Strace是一个简单的跟踪系统调用执行的工具.在其最简单的形式中,它可以从开始到结束跟 ...

  10. 8. [mmc subsystem] host(第二章)——sdhci

    一.sdhci core说明 1.sdhci说明 具体参考<host(第一章)--概述> SDHC:Secure Digital(SD) Host Controller,是指一套sd ho ...