eclipse web項目 user library不能自動copy到項目lib目錄

在使用eclipse作web項目時,爲了方便管理jar包,自建了各類 User Library做爲第三方的庫引入項目,在eclipse中不報任何錯誤,可是當Web項目發佈到tomcat的時候,出現錯誤:

  1. java.lang.ClassNotFoundException  

各類的ClassNotFoundException,很納悶,明明引入了全部的jar包,爲什麼會報ClassNotFoundException?
上網查找一下,明白了:

classLoader有關,對於純java項目,它不存在WEB-INF目錄,因此在引入jar包的時候通常都是經過buildpath直接引入,例如我要引入Hibernate,那麼先定義一個user library,而後經過build path引入便可。 純java項目使用的本地本身的JRE,那麼classLoader在加載jar和class時候是分開的,對於咱們本身編寫的class,會在APP_HOME/bin下。導入的jar包或者user library的配置信息會出如今APP_HOME/.classpath文件中,ClassLoader會很智能去加載這些classes和jar。

而對於web項目, 雖然eclipse的workspace中仍然有.classpath文件,但即便你導入的了本身定義的user library,它也不會出如今.classpath中,這就是問題的關鍵。

對於java web項目,它最終不是經過本地的JRE去運行,而是部署到web 服務器,如Tomcat、Weblogic、WebSphere等,這些服務器都實現了自身的類加載器。java

以Tomcat典型結果爲例,它的目錄結構分別對應四個不一樣的類加載器,關係以下:web

common      ---   CommonClassLoadertomcat

server          ---    CatalinaClassLoader服務器

shared         ---    SharedClassLoaderapp

webapps     ---    WebappClassLoadereclipse

咱們的 web 應用都是部署到 webapps 目錄下,而 WebappClassLoader加載器專門負責加載 webapps 下全部web項目的 WEB-INF 下的類庫和類文件 而咱們經過 user library 引入的 jar 包天然不會被 WebappClassLoader 加載器加載,因此纔會出現 ClassNotFoundException 。

解決方法:

右鍵項目,選擇properties,而後選擇deployment assembly,在這裏,將本身用的到UserLibrary添加進來就OK了,在部署項目的時候,eclipse會將UserLibrary的全部jar包copy到tomcat的項目的lib目錄下,這樣就能夠加載了。



相關文章
相關標籤/搜索