eclipse中Build Path 導入的包和復制到 lib 包的區別


Java Build Path是我們編譯需要的包,在比如在import ***.***.***時如果沒用Java Build Path導入包的話類里面就有紅叉,說不識別這個類,build path只是是建立項目對本地存放的包的引用,並沒有將包復制到項目中。

復制到lib下是程序運行時需要的包,即便用Java Build Path導入過的包,沒放到lib下,運行項目時會出現ClassNotFoundException的異常.

 

 以下內容摘自:http://s343174147.iteye.com/blog/1986307

對於java web項目,它最終不是通過本地的JRE去運行,而是部署到web 服務器,如Tomcat、Weblogic、WebSphere等,這些服務器都實現了自身的類加載器。
比如tomcat應用服務器,它有其自己的類加載器,根據J2EE的規范去%web-project%/WEB-INF/lib的規范去找相應的lib,這就是為什么我們發布的WEB應用要符合那個格式
以Tomcat典型結果為例,它的目錄結構分別對應四個不同的類加載器,關系如下:

common      ---   CommonClassLoader

server          ---    CatalinaClassLoader

shared         ---    SharedClassLoader

webapps     ---    WebappClassLoader

我們的 web 應用都是部署到 webapps 目錄下,而WebappClassLoader加載器專門負責加載 webapps 下所有web項目的 WEB-INF 下的類庫和類文件。而我們通過 build path 引入的 jar 包自然不會被 WebappClassLoader 加載器加載,所以才會出現 ClassNotFoundException 。

eclipse引用library 是為了編譯代碼生成WEB-INF/classes里面的class文件使用,使用eclipse j2ee IDE時,會將WEB-INF/lib中所有的lib自動加入到 library中
eclipse工程下的library是用來編譯里面的src中java文件的
實際發布到tomcat時,僅僅只復制了WEB-INF/lib里面的jar包,所以會出現eclipse可以正常編譯但tomcat運行是找不到類的情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM