作者:楊鵬 Linux正以自由的精神席卷全球網絡操作系統市場,而Java憑借其開放、先進的架構正迅速占領著高端軟件領域。將這二者結合,便可通過Linux低廉的成本實現Java高級應用,在自由、高效的環境下充分發揮出Java的優勢。因此,無論從成本還是性能上考慮,二者的結合都可謂是相得益彰。例如,現在熱門的服務器端腳本jsp的推薦實現就是Linux上的Tomcat,而與Jboss結合更是極佳的EJB平台。 但是,Linux之所以未能在桌面應用等領域迅速普及,軟件安裝和設置復雜是一個重要原因。要在Linux下實現Java編程,其普通的環境設置可能令習慣了Windows的用戶望而卻步。其實,很多問題只需要簡單的設置就能解決。 下面,筆者就以Red Hat Linux 7.2為例,談談JDK/JRE環境配置的過程。由於JDK1.x一般都自帶JRE(Java Runtime Environment,Java運行時環境),不必另外安裝,也就不單獨討論了。 建議不太熟悉Linux系統的讀者,下載RPM格式的JDK包。只需要一條命令就可以完成安裝: rpm -ivh j2sdk-1_x_x-linux.rpm 在默認情況下,安裝路徑是/usr/java/jdk1.x,那麼相應的JRE目錄就是/usr/java/jdk1.x/jre。安裝完RPM包僅僅是個開始,要順利編譯運行Java程序,需要設置以下路徑。 JAVA_HOME:指安裝JDK的路徑,例如/usr/java/jdk1.x。 JRE_HOME:與JAVA_HOME對應,其下的JRE目錄,如/usr/java/jdk1.x/jre。 PATH:與Windows中Path含義一樣,是Java、Javac等程序的執行路徑,應當指向JDK和JRE下的BIN目錄,但不要覆蓋了原有路徑,使用下面這條命令: eXPort PATH=$PATH:/usr/java/jdk1.x/bin:/usr/java/jdk1.x/jre/bin LD_ASSUME_KERNEL: 安裝完成後,比較容易出現的問題是執行Java或Javac時停止響應。切換到另一操作台,可以看見數個同名進程,其中有一個Defunct。這是由於庫間的版本沖突造成的,這時就需要輸出這個變量,指定版本。 export LD_ASSUME_KERNEL =2.2.5 CLASSPATH:這是非常重要的環境變量,用於指定Java非核心庫的位置,也就是說是否設置並不影響Java核心庫的使用。通常是: /usr/java/jdk1.x/lib/tools.jar:/usr/java/jdk1.x/lib/dt.jar:. 這裡要特別注意最後一個圓點,這是初學者比較容易碰到的問題。如果我們設置了ClassPath變量而沒有這個圓點,那麼執行一個最簡單的HelloWorld程序的時候,系統會提示NoClassFoundError…錯誤。其原因就是Java根據ClassPath尋找類(別忘了Java程序是以類為單位的),而Linux系統的特點卻是不會自動搜索當前目錄,結果當然是找不到當前的類(如果不設置ClassPath,反而可以執行,這是由於當找不到該變量時,默認值就是當前路徑)。圓點的作用就是在類搜索路徑中加入當前目錄。 以上工作完成後,大部分Java程序都應當可以正常運行了。如果仍然有問題,可能是系統中的某些庫不兼容,可以通過安裝Compat-c庫來解決,包括compat-glibc-xx.x.x.rpm、compat-libs-xx.x.x.rpm和compat-egcs-xx.x.x.rpm,這些包都可以在Red Hat 7.2光盤上找到。安裝完成後記得執行/usr/i386-glibc.../bin/i386...env.sh腳本,以設置相關環境。 另外,可能出現的問題是某些連接符號的問題,如Java要求/usr/lib下有libstdc++-libc6.1-1.so.2等這樣一些庫。實際上根據版本不同,它們可能只是指向libstdc++-2的連接,也可能是指向libstdc++-3的連接。這時,可以根據系統提示會找不到什麼庫,需參照該目錄下的有關連接(因為可能僅僅只是版本的區別),手工建立到相應庫的連接。 這樣,所有的准備工作就算完成了。最後,建議將上述變量設置添加到/etc/profile中,以便每次啟動時可以自動執行。 通過以上努力,相信你的Java程序已經可以在Linux上奔馳如飛了。