09 May 2011

用比較舊版本的 Eclipse 匯出 JAR 的時候會出現 JAR: Could not find the main class. 今天把做好的 swing 專案匯出成 JAR,在桌面點兩下什麼事情都沒發生 … 遇到問題最害怕的是什麼錯誤訊息都沒有,該從何查起 …

在 JAR: Could not find the main class. 中有提到,在 cmd 下輸入 java -jar xxxx.jar 就可以顯示錯誤訊息

C:\Documents and Settings\user\桌面>java -jar xpath.jar Exception in thread "main" java.lang.NoClassDefFoundError: com/gargoylesoftware/htmlunit/FailingHttpStatusCodeException Caused by: java.lang.ClassNotFoundException: com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: xpath.tree.Xpath. Program will exit.

這時候想起之前是用 Fat Jar  搞定的,去下載了 fat jar 的 lib 之後,放入 eclipse plugin 內,成功的匯出了一個 fatjar.jar,點兩下,確定可以執行 ~ 過不久即發現 … 原來 Eclipse 3.4 以上就已經有包含 fat jar 了,
在要匯出的專案上按右鍵 -> Export -> Runnable JAR file

在 library handling 的部分,可以挑選自己想要的方式

  1. Extract required libraries into generated JAR
    把所有的 import JAR 都拆開來,包含在 JAR 的各個目錄中,ex. net/org/xxx.class
  2. Package required libraries into generated JAR
    把所有的 import JAR 都包在 JAR 的根目錄下
  3. Copy required libraries into a sub-folder next to the generated JAR
    把所有 import JAR 放在 JAR 外面獨立一個資料夾

好物一枚!!! ^__^

</span>

參考資料:

  1. JAR: Could not find the main class. @ 蛙齋
<address>
  <a href="http://wazai.net/2485/jar-could-not-find-the-main-class" target="_blank">http://wazai.net/2485/jar-could-not-find-the-main-class</a>
</address>