一.建立user library
導入第三方jar文件,最簡單的方式是:右鍵工程/屬性/java build path/add external jars.
另一種方式是:window/prefrence/java/build path/user lib,新建用戶庫,可以為其指明jar文件,doc文件,src文件,這么一弄,在編程時就可以按F3查看代碼定義了,並且能夠鼠標懸停還可查看說明,函數的參數有具體的含義而不是arg1,arg2......
用user lib的方式,可以使多個工程共享一套第三方庫,節省磁盤空間,並且可以配置好user lib,以后用時直接添加user lib就可以查看doc和src。
這兩種方式,其實很像動態鏈接庫和靜態鏈接庫。使用動態鏈接庫生成的可執行文件體積小,復用模塊多;使用靜態鏈接庫生成的可執行文件對外界依賴少,便於移植,但無法進行本地化,一旦更改庫,就需要重新編譯生成可執行文件。
當然是建立user lib好,建立一個文件夾,里面放的全是第三方庫及其對應的源代碼和文檔,在eclipse中建立對應的user lib,並綁定源代碼和文檔。
二.android工程和web工程
android工程和web工程都有lib目錄,只要把jar文件復制到該目錄,運行時便會一切正常。無需設置java build path。而設置user lib這種方式就會報錯。
下載完struts並建立user library之后,新建動態網站項目並導入user library,運行web項目無法運行,說類未定義。
java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSON
編android時,建立項目並配置好其build path后,欲將其導出為jar文件。設置好了user lib,編譯一切正常,只有運行時說找不到淚,可是我眼里都是淚呀。這個問題難了我一個晚上
Exception in thread "main" java.lang.NoClassDefFoundError
java.lang.NoClassDefError找不到類定義
下面說說解決方案。
三.user lib隨工程導出
編譯正常,導出之后就會出錯:說找不到類定義
這里的導出包括:導出為jar文件,導出為apk文件
這是因為依賴庫沒有導出,右鍵工程屬性在java/buildPath/order and exports中打幾個鈎就可以了,如果編的是android工程,這么一弄就把user lib打包到了apk,也打包到了jar文件中,總之,這種方法適用於打包輸出的情況。
如果是建立的web工程,上面那種方法就不行了,因為我點的是直接運行,並沒有打包成war文件,tomcat說找不到類。那就要右鍵工程屬性在deployment assembly中設置,添加部署到服務器的程序集。如果只是添加user lib,卻沒有部署到服務器會產生一個警告。你工程上的感嘆號可能就是這個原因。
經過我測試,把struts-all/lib/下的jar全部復制到項目目錄下無法運行,把struts-all/apps/blank/lib復制到項目目錄下就可以運行。
四.最后
路徑名別有漢語,說不定就出錯了,路徑名有空格說不定就錯了。
關閉一下,重新啟動,說不定就好了