OpenJDK和SUN JDK的区别:

  • 授权协议的不同:OpenJDK采用GPL V2协议放出,而SUN JDK则采用JRL放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用。
  • OpenJDK不包含Deployment(部署)功能:部署的功能包括:Browser Plugin、Java Web Start、以及Java控制面板,这些功能在OpenJDK中是找不到的。

  • 下载jdk:

链接: https://pan.baidu.com/s/11glwWBHSf_Hd6LRhyfIMXw 密码: 9tcr

然后进入下载目录:

sudo mkdir /usr/lib/jdk
sudo tar -zxvf jdk-8u60-linux-x64.tar.gz -C /usr/lib/jdk
//-C代表change目录的意思,本例中指定解压文件到/usr/lib/jdk这个目录下

  • 配置环境变量
sudo gedit ~/.bashrc
//如果你装了zsh,执行下面这个,上面的不用执行
sudo gedit ~/.zshrc

文件的末尾追加下面内容:

#set oracle jdk environment
export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_60 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

  • 使环境变量马上生效
source ~/.bashrc
//或者
source ~/.zshrc

然后验证:

可以
发生错误

感谢:https://zhuanlan.zhihu.com/p/27892768

  • 若不成功(设置系统默认JDK):
sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.8.0_60/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.8.0_60/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jdk/jdk1.8.0_60/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jdk/jdk1.8.0_60/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jdk/jdk1.8.0_60/bin/javap 300
//执行对应的 

然后执行:

sudo update-alternatives --config java

测试:

java -version
javac -version

解释:

javac命令用与编译java源码文件,其语法格式如下:
javac [ options ] [ sourcefiles ] [ @files ]
参数可按任意次序排列
options                       命令行选项
sourcefiles                 一个或多个要编译的源文件(例如 MyClass.java)
@files                           一个或多个对源文件进行列表的文件


linux增加环境变量的方法:

方法一:

  在/etc/profile文件中添加变量【对所有用户生效(永久的)】用vim在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。要让刚才的修改马上生效,需要执行以下代码# source /etc/profile

方法二:

  在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】用vim在用户目录下的 .bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。要让刚才的修改马上生效,需要在用户目录下执行以下代码# source .bash_profile


下面对上面一些现象作出的解释,记录下的的原因是涉及到linux的一些操作,当作熟悉linux了

感谢:https://blog.csdn.net/rj042/article/details/72034650

在linux系统中,由于涉及到版权问题,在大部分linux系统的发行版本中,默认都安装了OpenJDK,并且OpenJDK的java命令也已经加入到环境变量中了。

在刚装好的linux系统中,运行java -version,输出如下(JDK版本不同,输出的版本可能不同):

但在进行java开发时,我们大多是需要使用Sun(准确的说应该是Oracle)的JDK,所以我们会去Oracle官网下载相应版本的JDK进行安装。

如何在linux上安装,在此不在赘述。

在linux上安装完JDK后,我们会在~/.bash_profile 把安装的java加入到环境变量中。原以为就万事大吉了,在运行java程序时会使用自己安装的JDK。

如果你是这么想的就大错特错了,在文章开头讲的,由于linux系统的发行版中默认安装的时OpenJDK,尽管我们把安装的SunJDK的java命令也加入到环境变量中,但是我们运行

java -version,输出确还是和之前一样。

这要这么破!!!查找原因,不急,先运行

whereis java

输出如下(这是我自己电脑的输出,和文字不一样,可以忽略图):

从图中在几个地方都有 java 命令,其中/opt/java/bin/java 是我自己安装的SunJDK的java命令所在的目录,而/usr/bin/java是系统中默认安装的java命令所在的目录

原因就在这,执行

ls -la /usr/bin/java

输出如下(这是我自己电脑的输出,和文字不一样,可以忽略图):

这是一个软连接cd /etc/alternatives到目录下看个究竟:

然后输入(这是我自己电脑的输出,和文字不一样,可以忽略图):

 ls -la

输出比较多,而且很多软链,其中有一个

java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java

到此,应该明白了,java命令其实指向的是OpenJDK中的java命令所以才会出现我们把自己安装的SunJDK的java命令配置到环境变量中后,依然不起作用

所以我们要做的就是需要把java的软链指向我们自己安装的SunJDK的java命令,即/opt/java/bin/java


使用安装的JDK替代系统默认的OpenJDK

linux中提供了update-alternatives命令,update-alternatives是linux系统(大部分linux系统都支持此命令)中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,而所有的这些就构成了备选方案系统(alternatives system)。

很多时候我们会将拥有相同或相似功能的不同应用程序安装在同一个操作系统上,例如同一个操作系统上的不同文本编辑器。这给了这个系统的用户在编辑文本时有了更多的选择,如果用户愿意他们可以自由选择任意一个来使用。

其实update-alternatives命令的功能很好理解,举个例子:在Window系统中,如果我们安装多个浏览器,比如有火狐、有IE、有360、有Chrome等,当我们从某个链接进去打开网页时,可能会问你使用哪个浏览器,当你选择某个浏览器时,此浏览器会问你是否把它作为默认浏览器,如果你选择了是,那下次点开某个链接时,就直接使用默认浏览器打开了!

现在我们在系统中同时安装了open jdk和sun jdk两个版本,(由于linux发行版本中默认使用OpenJDK的java命令 )而我们又希望系统默认使用的是sun jdk的java命令,那怎么办呢?通过update-alternatives就可以很方便的实现了。

首先运行以下命令查看java当前的默认配置

update-alternatives --display java

输出如下(后面有省略):

java - status is manual.link currently points to /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
/usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java - priority 170131slave keytool: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/keytoolslave orbd: /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/orbd
......

可以从输出中看到系统中java默认使用的OpenJDK,其中数字170131表示优先级。

下面进入正式配置阶段

1. 把自己安装的SunJDK加入到备选系统中

运行命令(注意命令最后的数字表示优先级,其中170130为SunJDK的alternative的优先级)

 update-alternatives  --install /usr/bin/java java /opt/java/bin/java 170130

2. 选择自己安装的SunJDK作为首选java命令

运行命令

update-alternatives --config java

输出如下

There are 2 programs which provide 'java'.Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java2           /opt/java/bin/java
Enter to keep the current selection[+], or type selection number: 

config命令是交互式的命令,可以根据提示进行选择,此处我们选择2,即使用安装的SunJDK的java命令,然后按回车键!

至此,配置完成了!

说明:在配置步骤1中,我们指定SunJDK的优先级是170130(比当前优先级170131低),所以需要进行步骤二进行手动选择;如果我们指定的优先级比当前优先级170131高,则步骤二可以省略,系统自动会选择优先级高的作为默认alternative!

linux安装java_linux中替换系统自带的OpenJDK相关推荐

  1. centos 安装 sun java_CentOS卸载系统自带的OpenJDK并安装Sun的JDK的方法

    搜索热词 查看目前系统的jdk得到的结果: [root@dc-01 java]# rpm -qa | grep jdk java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.e ...

  2. 【OSX】OSX下采用MAMP的PHP替换系统自带PHP

    OSX下采用MAMP的PHP替换系统自带PHP 前言 众所周知,OSX自带了PHP和Apache,显然这些不是我们需要的. 很多人都会安装集成环境作为自己的开发环境.比如我选择的是MAMP,PHP的版 ...

  3. 解决Linux安装过程中不能安装Grub的问题

    参考,部分转载和万分感谢:解决Linux安装过程中不能安装Grub的问题 关卡1: 从前段时间折腾了很久,刚开始是因为/boot区已经占满了,那么为什么会占满呢?因为当时尝试初次手动分区,然后参考了网 ...

  4. linux 安装程序丢失链接动态库,Linux安装软件过程中提示缺少动态链接库.so的解决方法...

    Linux在安装软件的时候有时会出现错误,提示缺少动态链接库.so,该问题是由什么原因导致的呢? 情况分析: 1.缺少动态连接库.so-cannot open shared object file:N ...

  5. 安装MacVim来替代系统自带vim

    安装MacVim来替代系统自带vim 一般情况下,Mac OS X 自带的 vim 是不能满足需求的,所以大都选择安装MacVim.可以直接通过brew安装,如果没有安装brew,先自行百度安装bre ...

  6. 如何在Linux命令行中替换多个文件中的字符串

    本文翻译自:How to replace a string in multiple files in linux command line I need to replace a string in ...

  7. 如何安装linux安装光盘中的软件包

    如何安装linux安装光盘中的软件包 一般linux安装光盘中会包含大量软件安装包,但linux无法直接读取光盘文件,想要安装其中软件,必须将光盘中的文件挂载到linux临时文件目录下,linux一般 ...

  8. iOS程序中调用系统自带应用(短信,邮件,浏览器,地图,appstore,拨打电话,iTunes,iBooks )...

    在网上找到了下在记录下来以后方便用 在程序中调用系统自带的应用,比如我进入程序的时候,希望直接调用safar来打开一个网页,下面是一个简单的使用: 查看更多iPhone应用程序的调用和第三方应用程序的 ...

  9. 安装python系统找不到指定的路径_解决安装过程中显示“系统找不到指定的路径”-百度经验...

    解决软件安装过程中显示"系统找不到指定的路径"?有些用户在变声专家一半时候弹出"无法打开....系统找不到指定的路径"字样,解决方法非常简单,如遇上述问题的小伙 ...

最新文章

  1. python web server comparison
  2. Go 面向对象之结构体
  3. linux的gromacs模拟分子运动,分子动力学技术交流---gromacsamber
  4. echarts 图表配置tooltip 的formatter
  5. linux双网卡 ipv4 ipv6 双栈,ipv4 ipv6双栈哪个优先
  6. axios, ajax和fetch的比较
  7. linux xargs命令选项,使用xargs命令在Linux中执行多个操作 | MOS86
  8. 解读 V8 GC Log(二): 堆内外内存的划分与 GC 算法
  9. 互联网时代掘金在线教育:自助式学习 社交是标配元素
  10. Unity 粒子特效相对位置和大小的调整
  11. 华硕显卡驱动怎么安装?
  12. SQL SERVER 2016安装部署
  13. 源码编译、安装gcc 7
  14. 【12.3】call_soon、call_at、call_later、call_soon_threadsafe
  15. kubernetes——安全认证
  16. 史上最全的微信运营架构思维导图
  17. ubuntu下载好了输入法怎么切换
  18. ISP三层结构的理解(计算机网络)
  19. Primavera P6 EPPM R18.8.X Patch/Update(补丁/更新)
  20. 物联网云平台设计与开发: 实验1 前端环境搭建与开发

热门文章

  1. 从sap xi生产wsdl文件,客户端怎么做webservice?
  2. 协同OA对业务和管理进行流程的梳理
  3. 给服务器装系统U盘要处理吗,服务器装系统从u盘装
  4. node MySQL buffer_node.js中buffer方法使用说明
  5. php数组函数及用法,php数组函数 in_array 的用法及注意事项
  6. pytorch 训练过程acc_深度学习Pytorch实现分类模型
  7. [javaweb] servlet 服务器端转发和客户端重定向 (四)
  8. Ubuntu Vmwaretools安装说明
  9. Ubuntu下的固件分析Binwalk的安装
  10. Python基础入门:*和**的使用教程