linux jdk版本隨時切換版本隨時切換實現方法

項目處理問題遇到如下情況,引用第三方的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版本,由于編譯出的字節(jié)碼版本不一致,導致無法轉換成android虛擬機刻度的字節(jié)碼,因此引用的jar包實際并未編譯到當前apk中,程序運行的時候當然就找不到相應的類了。
公司編譯服務器實際上配置了多個jdk版本,而且android編譯是在設置環(huán)境變量的時候設置的jdk版本。編譯android4.4使用的是jdk1.6,而編譯android5.0則使用的是jdk1.7,這就涉及到了如何隨時切換jdk版本。
先來看看如何設置jdk環(huán)境變量,百度搜索得到的答案多是修改~/.bashrc或修改/etc/profile文件一次性完成配置。我用vi打開這兩個文件并未找到相應的jdk環(huán)境變量,但是使用java -version確實能看到默認的jdk版本。這就有了疑問,當前默認jdk軟件的環(huán)境變量是在哪里配置的?
使用 which java 命令找到當前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下的多版本管理軟件,利用它就可以實現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一樣,一次操作,全局有效。如果沒有超級權限怎么辦?
設置環(huán)境變量linux提供了export命令,該命令的修改只對當前終端有效。
fordreamxin@compiler207:/$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
上面的命令顯示了當前的環(huán)境變量,也就是~/.bashrc或/etc/profile文件的內容,它表示了當前所有能夠全局使用的所有軟件或命令的環(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)境變量中已經設置了一個jdk,那么把新的jdk設置在PATH的開始才會有用。
export的具體使用可參考它的使用手冊。
相關文章
Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統之一,內2025-04-16如何在Linux查看硬盤信息? 查看Linux硬盤大小類型和硬件信息的5種方法
使用Linux系統的過程中,查看和了解硬盤信息是非常重要的工作,尤其是對于系統管理員而言,那么在Linux系統中如何查看硬盤信息?以下是具體內容介紹2025-03-12如何在 Linux 中查看 CPU 詳細信息? 3招輕松查看CPU型號、核心數和溫度
在日常運維工作中,獲取 CPU 信息是系統運維管理員常見的工作內容,無論是為了性能調優(yōu)、硬件升級還是僅僅滿足好奇心2025-03-11什么是 Arch Linux? 獨樹一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡化,優(yōu)化,現代化,實用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來簡要解讀2025-02-19如何在Linux環(huán)境下制作 Win11裝機U盤?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統切換回 Windows 11,我們可以制作一個win11裝機u盤,詳細如下2025-02-17Rsnapshot怎么用? 基于Rsync的強大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過 SSH 備份遠程文件,接下來詳細介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時、每天、每周和每月的本地備份,以及如何進2025-02-06Linux Kernel 6.13發(fā)布:附更新內容及新特性解讀
Linux 內核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡化內核搶占邏輯,通過減少與調度器相關的調用次數,讓內核在運行時表現更優(yōu),從而提高效率2025-01-23五大特性引領創(chuàng)新! 深度操作系統 deepin 25 Preview預覽版發(fā)布
今日,深度操作系統正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統2025-01-18Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內核版本為 Linux 6.8,這次更新帶來了諸多優(yōu)化和改進,進一步鞏固了 Mint 在 Linux 桌面操作系統領域的2025-01-16LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來看看詳細安裝指南2025-01-16