请选择 进入手机版 | 继续访问电脑版

[LINUX] linux jdk版本随时切换版本随时切换实现方法

[复制链接]
查看86 | 回复21 | 2021-9-5 01:36:39 | 显示全部楼层 |阅读模式

项目处理标题 遇到 如下环境 ,引用第三方的jar包报出ClassDefNotFoundException错误导致app崩溃,两边 沟通确认该类存在且清除 工程未clean,代码混淆导致等缘故原由 。

注意 到编译app的时间 提示了很多如下与正常环境 下不一样的信息:

trouble processing:
bad class file magic (cafebabe) or version (0033.0000)
...while parsing com/baidu/mapapi/SDKInitializer.class
...while processing com/baidu/mapapi/SDKInitializer.class
279 warnings
SDKInitializer正是ClassDefNotFoundException报错的类。
 
百度搜索 出现这个编译提示找到了标题 出现的缘故原由 :第三方公司打包这个jar包利用 的jdk1.7版本(大于1.6),而我们编译app利用 的是1.6版本,由于编译出的字节码版本不同等 ,导致无法转换成android假造 机刻度的字节码,因此引用的jar包实际 并未编译到当前apk中,程序运行的时间 当然就找不到相应的类了。
 
公司编译服务器实际 上设置 了多个jdk版本,而且android编译是在设置环境变量的时间 设置的jdk版本。编译android4.4利用 的是jdk1.6,而编译android5.0则利用 的是jdk1.7,这就涉及到了怎样 随时切换jdk版本。
 
先来看看怎样 设置jdk环境变量,百度搜索 得到的答案多是修改~/.bashrc或修改/etc/profile文件一次性完成设置 。我用vi打开这两个文件并未找到相应的jdk环境变量,但是利用 java -version确实能看到默认的jdk版本。这就有了疑问,当前默认jdk软件的环境变量是在那里 设置 的?
 
利用 which java 下令 找到当前java可实验 程序的位置
fordreamxin@compiler207:~$ which java
/usr/bin/java
 /usr/bin/目次 下存放的多是用户安装的软件

fordreamxin@compiler207:~$ ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 13 06:18 /usr/bin/java -> /etc/alternatives/java*

alternatives是一个linux下的多版本管理软件,利用 它就可以实现jdk的版本切换,这点稍后再形貌 。先来alternatives目次 地下看看有些什么东西。

fordreamxin@compiler207:/etc/alternatives$ ls java*
java  java.1.gz  javac  javac.1.gz  javadoc  javadoc.1.gz  javah  javah.1.gz  javap  javap.1.gz  java_vm  javaws  javaws.1.gz
fordreamxin@compiler207:/etc/alternatives$ ll java
lrwxrwxrwx 1 root root 36 Nov 13 06:17 java -> /usr/lib/jvm/java-6-sun/jre/bin/java*

原来该目次 下放置了很多软件的版本引用,从这里可以找到当前软件版本(jdk)的实际 位置

fordreamxin@compiler207:/etc/alternatives$ ls /usr/lib/jvm/
java-1.7.0-openjdk-amd64  java-6-sun  java-6-sun-1.6.0.26  java-7-openjdk-amd64
在/usr/lib/jvm文件夹下时间存储了各个jdk版本的软件,而alternatives正是通过修改它的java引用达到版本切换的目标 。
利用 alternatives实现版本切换的方法如下:

1. 查看相应的jdk是否在 ubuntu的jdk菜单里,查看:
update-alternatives --config java
update-alternatives --config javac

2.假如 没有在菜单里可以如下方式添加:
update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/jdk1.6.0_12/bin/java 300
update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/jdk1.6.0_12/bin/javac 300
 注意 :jdk1.6.0_12 版本不同会有变动

3.sudo update-alternatives --config java
sudo update-alternatives --config javac
选择序号,回车即可;
4.然后java -version,javac -version查看当前jdk版本

 

但是利用 alternatives必要 sudo超级权限,也就是说这种切换是一种全局切换,同修改~/.bashrc或/etc/profile一样,一次操作,全局有效 。假如 没有超级权限怎么办?

设置环境变量linux提供了export下令 ,该下令 的修改只对当前终端有效 。

fordreamxin@compiler207:/$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
上面的下令 表现 了当前的环境变量,也就是~/.bashrc或/etc/profile文件的内容,它表示了当前全部 可以或许 全局利用 的全部 软件或下令 的环境变量,没有这些变量,我们不能在恣意 目次 下利用 很多下令 或软件,这也是环境变量的意义地点 。
通过如下下令 可以在$PATH的开始或末了 添加jdk的环境变量(bin目次 下保存了java, javac, javah等可实验 下令 )

export PATH="/usr/lib/jvm/java-7-openjdk-amd64/bin":$PATH

export PATH="$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin/"
由于实验 的时间 总是从$PATH的开始搜索 可实验 文件的位置,以是 假如 环境变量中已经设置了一个jdk,那么把新的jdk设置在PATH的开始才会有效 。

export的具体 利用 可参考它的利用 手册。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

avatar SUNSHINEhzl | 2021-9-12 22:57:31 | 显示全部楼层
经典!
回复

使用道具 举报

avatar 巴拿巴 | 2021-9-13 13:57:38 | 显示全部楼层
好好学习admin楼主的帖子!
回复

使用道具 举报

avatar 123457287 | 2021-9-17 06:28:10 | 显示全部楼层
今天皮痒了?
回复

使用道具 举报

avatar 八块田确 | 2021-10-4 06:35:56 | 显示全部楼层
刚看见一个妹子,很漂亮!
回复

使用道具 举报

avatar 枫夜渔火火f | 2021-10-15 11:11:41 | 显示全部楼层
不错哦,admin楼主这是要火的节奏啊!
回复

使用道具 举报

信admin楼主,得永生!
回复

使用道具 举报

白富美?高富帅?
回复

使用道具 举报

好多兽医在广场上义诊,admin楼主去看看吧!
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则