到 Jbuilder 9 之後,java 編譯成執行檔已經不像以前問題那麼多,而且也可以編成各種不同的平台的執行檔。
Jbuilder 製作執行檔的方法:
Wizards -> Native Executable Wizard
(畫面有空再補)
值得注意的是如果有外掛其它非 jdk 安裝目錄內的 class ,雖然在 Jubilder 內有指定這個 class path ,但是執行檔內並無此資訊,所以的時候會出現 java.lang.NoClassDefFoundError 的 exception ,如果要順利執行的話,以 oracle jdbc driver 為例,就要在 Command 模式下設定:
set CLASSPATH=C:\jdk1.4\;C:\oracle\ora92\jdbc\lib\ojdbc14.jar;C:\oracle\ora92\jdbc\lib\nls_charset12.jar;
(Linux 的話則利用 setenv CLASSPATH
當然也可以設成系統的環境變數,就不用每次開機都要重設一遍,但這不在這篇文章的討論範圍內。
不過我比較建議把用到的所有 class 放到自己的 project 目錄內,這樣可以把這個 class 一起封裝進你的執行檔裡面,也不用去擔心放到別台電腦沒有某個 class 了。
其實方法也很簡單,假設我今天的專案目錄是 c:\projects\acw ,如果要用到 oracle 的 jdbc driver,我就把 C:\oracle\ora92\jdbc\lib\ojdbc14.zip 裡的 oracle 目錄解壓縮到 c:\projects\acw\classes 裡面。
(注意! 這個檔案是 jar 封裝,所以會有一個 META-INF 的目錄,那個可以不用解壓出來)
再來 Native Executable 裡設定 Content 時,可以利用 Add Filters 功能。右下方會出現本來看不到的 oracle,這時點選之後,上面的 Expression 就會出現 oracle/*.*,再按確定就好了。
之後再 ReBuild 或 Make 時就會把 oracle jdbc driver 一起打包進執行檔了,雖然編繹的速度會因為要多加入指定的 class 而變慢,卻可以換來的程式可攜性,也達到了我們今天的目的。
(圖型後補)