2011-07-31 30 views
8

我已經使用Netbeans 7創建了一個JSF2項目,併成功將它部署在Glassfish 3.1上。 儘管ear文件已經增長得相當大(6.5mb),但它大部分都是由外部jar文件(如apache commons,solrj,primefaces和pdfrenderer等)複製到相應的war/ejb文件中。Glassfish中的外部庫的位置

我的問題是:我怎樣才能避免這種情況,並使我的耳朵文件更小 - 它應該只包含我創建的東西,外部庫只應該在服務器上部署一次。

我在網上搜索了這個答案,我發現的唯一的東西是將外部jar文件放在glassfish安裝目錄下的'domains/domain1/lib'或'domains/domain1/lib/ext'下並取消選中Netbeans項目庫設置中的'Package'標誌,但目前爲止還沒有工作(我總是得到ClassNotFoundExceptions)。

我是否需要做別的事情,在某處調整類路徑設置,或者如何實現此目的?有沒有人有辦法解決嗎?

更新:好的,我發現這隻發生在Netbeans(它的一臺運行64位Windows 7的筆記本電腦)的本地Glassfish安裝上。在我的遠程Linux機器上,它按預期工作,即我能夠將所有外部庫放到'domains/domain1/lib'中 - 我的ear文件現在只有〜700k :) 我會在我的Mac和另一個Windows 7盒也看,這是否是一個操作系統相關的問題或別的東西。

+0

對於參考,這裏已經回答了類似的問題:https://stackoverflow.com/questions/12219788/managing-shared-libraries-in-glassfish-server-open-source-edition-3-1-2 –

回答

-1

作爲類路徑一部分的唯一目錄是domain1\lib\classes目錄。把你的罐子放在那裏會將它們添加到類路徑中。

您也可以將您的耳朵文件放在lib目錄(以前稱爲APP-INF \ lib)下。這是把你的共享罐子的地方。

1

我想我現在可以自己回答這個問題了:domain1/lib似乎是放置所有這些jar文件的正確位置。至少它可以在我試過的和我的Mac上的2個Linux機器上完美地工作。我還發現它爲什麼在我的Windows 7筆記本電腦上沒有發揮同樣的作用。 域路徑是特定的用戶,如果您使用的Glassfish安裝隨Netbeans的,這意味着你必須把jar文件下

C:\用戶\`username` \的.netbeans \ 7.0 \ CONFIG \ GF3 \ DOMAIN1 \ lib中

工作作爲expectd,罐子下

C:\ Program Files文件\與GlassFish 3.1 \ GlassFish的\域\ DOMAIN1 \ lib中

另一方面似乎是被類加載器忽略了

+1

儘管它們都被稱爲domain1,但由於處於不同的位置,它們完全不同。第一個是有效的,因爲那是netbeans爲你創建的域,並且實際上是開始的。 –