人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

linux jdk版本隨時切換版本隨時切換實(shí)現(xiàn)方法

發(fā)布日期:2022-01-08 09:53 | 文章來源:腳本之家

項(xiàng)目處理問題遇到如下情況,引用第三方的jar包報出ClassDefNotFoundException錯誤導(dǎo)致app崩潰,雙方溝通確認(rèn)該類存在且排除工程未clean,代碼混淆導(dǎo)致等原因。

注意到編譯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報錯的類。

百度搜索出現(xiàn)這個編譯提示找到了問題出現(xiàn)的原因:第三方公司打包這個jar包使用的jdk1.7版本(大于1.6),而我們編譯app使用的是1.6版本,由于編譯出的字節(jié)碼版本不一致,導(dǎo)致無法轉(zhuǎn)換成android虛擬機(jī)刻度的字節(jié)碼,因此引用的jar包實(shí)際并未編譯到當(dāng)前apk中,程序運(yùn)行的時候當(dāng)然就找不到相應(yīng)的類了。

公司編譯服務(wù)器實(shí)際上配置了多個jdk版本,而且android編譯是在設(shè)置環(huán)境變量的時候設(shè)置的jdk版本。編譯android4.4使用的是jdk1.6,而編譯android5.0則使用的是jdk1.7,這就涉及到了如何隨時切換jdk版本。

先來看看如何設(shè)置jdk環(huán)境變量,百度搜索得到的答案多是修改~/.bashrc或修改/etc/profile文件一次性完成配置。我用vi打開這兩個文件并未找到相應(yīng)的jdk環(huán)境變量,但是使用java -version確實(shí)能看到默認(rèn)的jdk版本。這就有了疑問,當(dāng)前默認(rèn)jdk軟件的環(huán)境變量是在哪里配置的?

使用 which java 命令找到當(dāng)前java可執(zhí)行程序的位置
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下的多版本管理軟件,利用它就可以實(shí)現(xiàn)jdk的版本切換,這點(diǎn)稍后再描述。先來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*

原來該目錄下放置了很多軟件的版本引用,從這里可以找到當(dāng)前軟件版本(jdk)的實(shí)際位置

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引用達(dá)到版本切換的目的。
使用alternatives實(shí)現(xiàn)版本切換的方法如下:

1. 查看相應(yīng)的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查看當(dāng)前jdk版本

但是使用alternatives需要sudo超級權(quán)限,也就是說這種切換是一種全局切換,同修改~/.bashrc或/etc/profile一樣,一次操作,全局有效。如果沒有超級權(quán)限怎么辦?

設(shè)置環(huán)境變量linux提供了export命令,該命令的修改只對當(dāng)前終端有效。

fordreamxin@compiler207:/$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
上面的命令顯示了當(dāng)前的環(huán)境變量,也就是~/.bashrc或/etc/profile文件的內(nèi)容,它表示了當(dāng)前所有能夠全局使用的所有軟件或命令的環(huán)境變量,沒有這些變量,我們不能在任意目錄下使用很多命令或軟件,這也是環(huán)境變量的意義所在。
通過如下命令可以在$PATH的開始或末尾添加jdk的環(huán)境變量(bin目錄下保存了java, javac, javah等可執(zhí)行命令)

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

export PATH="$PATH:/usr/lib/jvm/java-7-openjdk-amd64/bin/"
由于執(zhí)行的時候總是從$PATH的開始搜索可執(zhí)行文件的位置,所以如果環(huán)境變量中已經(jīng)設(shè)置了一個jdk,那么把新的jdk設(shè)置在PATH的開始才會有用。

export的具體使用可參考它的使用手冊。

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部