ubuntu java版本间切换
今天在编译 rk3288 安卓5.1时出错,提示需要java 1.7.x版本的jdk,而我的ubuntu默认已经安装了java 1.8.0_362版本,下面介绍下我是如何进行java版本切换的。
1. 从官网上下载得到 java 1.7.0_80压缩包(找个QQ邮箱注册账号后就可以直接下载了)
2. 将压缩包放到ubuntu某个路径下进行解压,我这里的路径是:/ext2disk_2/QY_RK3288S
1 book@ubuntu:/ext2disk_2/QY_RK3288S$ ll 2 total 149952 3 drwxr-xr-x 4 root root 4096 May 26 19:23 ./ 4 drwxr-xr-x 6 root root 4096 May 26 19:03 ../ 5 -rwxr-xr-x 1 root root 153530841 May 26 19:22 jdk-7u80-linux-x64.tar.gz* 6 drwxr-xr-x 8 uucp 143 4096 Apr 10 2015 jdk1.7.0_80/ 7 drwxrwxr-x 36 hovan hovan 4096 May 27 00:14 qiyang-rk3288-android5.1-sdk/
3. 查看ubuntu当前1.8.0版本java的一些信息:
执行 sudo update-alternatives --display java ,可以看到, /usr/bin/java 其实是一个符号链接且指向 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java (即1.8.0版本的安装路径),优先级为1081(数字越大优先级越高)
1 book@ubuntu:/ext2disk_2/QY_RK3288S$ sudo update-alternatives --display java 2 java - auto mode 3 link best version is /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 4 link currently points to /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 5 link java is /usr/bin/java 6 slave java.1.gz is /usr/share/man/man1/java.1.gz 7 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java - priority 1081 8 slave java.1.gz: /usr/lib/jvm/java-8-openjdk-amd64/jre/man/man1/java.1.gz
4. 切换为 1.7.0_80 java 版本,优先级参数只要大于1081即可,这里我设为1090:
1 | sudo update-alternatives -- install /usr/bin/java java /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 /jre/bin/java 1090 |
5. 重复步骤4,将javap, javadoc,javac也切换为1.7.0_80 版本(注:这几个如果不设置的话则有可能仍用的是1.8.0版本的):
1 2 3 | sudo update-alternatives -- install /usr/bin/javap javap /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 /bin/javap 1090 sudo update-alternatives -- install /usr/bin/javadoc javadoc /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 /bin/javadoc 1090 sudo update-alternatives -- install /usr/bin/javac javac /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 /bin/javac 1090 |
补充说明:
- java:用来运行java可执行程序的工具。
- javac:java编译器,用来编译java类型的文件。
- javap:JDK里面的一个反汇编工具。
- javadoc:JDK里面的一个java API 文档生成工具。
6. 若是需要对 java,javac,javap,javadoc的不同版本间进行切换,则执行下面命令进行切换,否则可以不用理会:
1 2 3 4 | sudo update-alternatives --config java #java版本间相互切换,如1.7.0和1.8.0版本之间互切 sudo update-alternatives --config javac #javac版本间相互切换,如1.7.0和1.8.0版本之间互切 sudo update-alternatives --config javap #javap版本间相互切换,如1.7.0和1.8.0版本之间互切 sudo update-alternatives --config javadoc #javadoc版本间相互切换,如1.7.0和1.8.0版本之间互切 |
这里以java工具为例,演示如何在1.7.0和1.8.0版本之间进行切换:
执行 sudo update-alternatives --config java 命令后根据提示输入对应的数字编号回车并切换,我这里输入了0:
1 book@ubuntu:/$ sudo update-alternatives --config java 2 There are 2 choices for the alternative java (providing /usr/bin/java). 3 4 Selection Path Priority Status 5 ------------------------------------------------------------ 6 * 0 /ext2disk_2/QY_RK3288S/jdk1.7.0_80/jre/bin/java 1090 auto mode 7 1 /ext2disk_2/QY_RK3288S/jdk1.7.0_80/jre/bin/java 1090 manual mode 8 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode 9 10 Press <enter> to keep the current choice[*], or type selection number: 0 11 book@ubuntu:/$
7. 最后一步是配置JAVA_HOME和JRE_HOME等环境变量,将我们的解压路径添加到这些系统环境变量里:
- sudo vi /etc/profile 打开profile文件,末尾处追加如下几行代码,保存后执行 source /etc/profile 即可:
1 2 3 4 5 | #这里的路径为我的1.7.0_80 JDK 解压目录 export JAVA_HOME= /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 export JRE_HOME= /ext2disk_2/QY_RK3288S/jdk1 .7.0_80 /jre export CLASSPATH=.:$JAVA_HOME /lib :$JRE_HOME /lib :$CLASSPATH export PATH=$JAVA_HOME /bin :$JRE_HOME /bin :$JAVA_HOME:$PATH |
哪天如果要用回1.8.0版本的JDK,则撤回/etc/profile文件的改动,然后使用 sudo update-alternatives --config [java | javac | javap | javadoc] 来切换回1.8.0版本!!!
8. 检查是否切换成功:
1 root@ubuntu:/# java -version 2 java version "1.7.0_80" 3 Java(TM) SE Runtime Environment (build 1.7.0_80-b15) 4 Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) 5 root@ubuntu:/# 6 root@ubuntu:/# 7 root@ubuntu:/# javac -version 8 javac 1.7.0_80 9 root@ubuntu:/# 10 root@ubuntu:/# javap -version 11 1.7.0_80 12 root@ubuntu:/# 13 root@ubuntu:/#
注:由于我从1.8.0_362的JDK版本切换为1.7.0_80版本,故我的安卓5.1源码需要把上一次编出来的整个out文件夹删掉再重新编译!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)