解决办法:

从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 5 长度解析

    mysql 5 以后 都按照字符来算 不是字节 char(10)可以放10个汉字或者10个字母

  2. 拒绝CPU挖矿矿工有责

    长期以来CPU挖矿给挖矿行业带来持久的负面影响,因为CPU是电脑的核心设备,一挖矿就干不了别的了,大家是否可以达成共识拒绝CPU挖矿? 显卡挖矿刚好构建在不影响大众的日常工作生活对电脑的需求之上,家用 ...

  3. .NET Core RabbitMQ探索(2)——RabbitMQ的Exchange

    实际上,RabbitMQ的生产者并不会直接把消息发送给队列,甚至生产者都不知道消息是否会被发送给一个队列.对于生产者而言,它们只能把消息发送到Exchange,一个Exchange所完成的工作相当简单 ...

  4. pycharm工具设置py模板

    直接上截图把,更加明确清晰 (a)shebang行 #!/usr/bin/python3 (b)预定义的变量要扩展为格式为$ {<variable_name>}的相应值. 可用的预定义文件 ...

  5. Java生鲜电商平台-销售管理设计与架构

    Java生鲜电商平台-销售管理设计与架构 说明:在Java开源生鲜电商平台中,销售人员我们称为跟餐饮店老板沟通与下载APP的一类地推人员.(所谓地推指的就是一个一个上门拜访.) 由于销售人员有以下几类 ...

  6. Linux管道及重定向

    Linux管道及重定向 对shell有一定了解的人都知道,管道和重定向是 Linux 中非常实用的 IPC 机制.在shell中,我们通常使用符合'|'来表示管道,符号'>'和'<'表示重 ...

  7. 浅谈 Flask 框架

    一.框架对比 Django —— 教科书式框架 优势:组件全,功能全,教科书 劣势:占用资源,创建复杂度高 Flask —— 以简单为基准开发,一切从简,能省则省 优势:轻,块 劣势:先天不足,第三方 ...

  8. Git 分支代码管理日记备注

    1〉  Bithucket 创建代码库 2〉  下载克隆代码 Git clone 代码链接 3〉  代码初始化完成之后,切换到代码文件夹 cd 文件夹名 4〉  查看分支情况 Git brach 5〉 ...

  9. shell脚本按当前日期输出日志

    shell脚本基本技能是设置变量,输出信息.如下: sh脚本输出到控制台 将以上脚本保存到test.sh脚本文件中,并赋予可执行权限:sudo chmod +x test.sh 执行脚本:bash t ...

  10. Django 简单的验证码

    创建一个 Django 项目:yanzhengma 和 应用 app01 修改 urls.py 文件 from django.contrib import admin from django.urls ...