Maven 項目的 classpath 理解

來源:互聯網
上載者:User

    相信很多初學的新同學在Maven項目中配置Spring的設定檔時,總會遇到各種找不到的問題,其實理解Tomcat的載入機制,問題便會迎刃而解,那麼我們來看Tomcat啟動

是怎麼一步步載入的.

    首先Tomcat啟動時,jvm的bootstrapLoader去載入java的標準庫,這是通過我們配置環境變數即 JAVA_HOME來確定核心庫的位置,接著會執行Tomcat bin目錄的啟動指令碼

Startup.sh 使用start參數調用 Catalina.sh 重寫系統的classpath並載入 bootstarp.jar 和 tomcat-juli.jar, 這些可以理解為Tomcat本身的東西,現在還沒到我們的項目。接著Tomcat 

會為每個Context建立ClassLoader .Tomcat 針對每個Context的預設classpath 是 WebApp/WEB-INF/ ,它會從目前的目錄下的class檔案夾載入對應的class檔案,會從lib檔案下載入lib包.從根目錄載入web.xml檔案,接著開始載入.當然Servlet3.0可以不從web.xml開始載入,只要實現了  WebApplicationInitializer  這個介面的類,會在servlet啟動時自動載入。

   好了,現在我們走到了我們項目的入口即web.xml ,在這裡我將會配置自己想要的組件。在Maven項目中,設定檔放在Resource中是標準的做法, Resurce中的檔案在編譯好後會在WEB-INF/class/ 檔案夾下,並不在根目錄下的. 現在我們來看這種Spring 配置方法

    <servlet>           <servlet-name>appServlet</servlet-name>           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>           <init-param>               <param-name>contextConfigLocation</param-name>               <param-value>classpath:servlet-context.xml</param-value>           </init-param>           <load-on-startup>1</load-on-startup>       </servlet>  

當把設定檔放到webapp下時,這樣是找不到設定檔的,因為classpath的尋找範圍是從/WEB-INF/classes中尋找的,而把設定檔放到webapp下,編譯後的位置是在/WEB-INF根目錄下,所以會找不到檔案。classpath 和 classpaht*的區別 , classpath* 會尋找根目錄下所有的檔案,至到找到匹配檔案即可。兒classpath只會在/WEB-INF/classes中尋找。

  其實最重要的是立即的Tomcat 的classpath. 千萬不能看你源碼目錄結構來理解classpath. 因為Tomcat是跑的你編譯後的目錄。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.