i'm sorry, i forgot this article where i found. that it is referenced.
以前也研究過Eclipse里Web Project引用Java Project的問題,沒有解決,特地再深入研究了一下。
思路及實踐如下:
1.Elcipse里Project Properties里有Project Reference的設置,說明有這個特性,Java Builder Path里也有引用的Projects設置。
試驗:建立兩個Java Project A、B,B引用A,設置B的Java Builder Path/Projects引用Project A,則B中的Class可以調用A中的Class,編譯和運行都通過。
說明Eclipse對Java Project的解決方案良好。
(Project Reference的設置不知道有什么用處)
2.Web應用,使用Eclipse WTP
按上面的試驗設置,(這里的B項目是一個Web項目),編譯可以通過,但是運行時找不到A項目中的類。
沒有找到有相應的解決方案。
3.Web應用,使用Sysdeo Tomcat Plugin
發現有這個Window/Preferences/Tomcat/Advanced/Add Java Projects to Tomcat classpath設置,將Java項目設置到Tomcat的類路徑中,對Tomcat是全局的,有一些不靈活,和其它的缺陷,比如加載這些類的ClassLoader將是SystemClassLoader而不是WebAppClassLoader,這將影響某些資源文件的加載。
另外,我在Tomcat5.5.17上試驗這個設置,結果啟動Tomcat就出錯。
看了Sysdeo的文檔,它介紹了DevLoader就專門解決這個問題的。看了一下他的源碼,很簡單,總共只有200行,基本上的邏輯是,讀取Eclipse項目下的.#webclasspath、.classpath文件以獲得引用的java類路徑,由
DevLoader加載這些項目外的類。
具體操作是:
1)設置Java Builder Path;
2)將Sysdeo Plugin下的DevLoader.zip解壓到Tomcat目錄/server/classes下,在Tomcat Project/Project Properties/Tomcat/Devloader 中選中Active DevLoader,及選中列表中項目外的classpath。
參考Sysdeo Plugin的ReadmeDevLoader.html.
這樣就解決了這個問題,效果是:修改了項目A、B中的代碼,不用重起Tomcat,就可以在瀏覽器中立即看到修改后的效果。
==========================================
Sysdeo Eclipse Tomcat Launcher plugin 是做J2EE開發的時候經常用到的一款插件,可以在Eclipse中啟動Tomcat,同時可以把Tomcat進程綁定到Eclipse Java Debugger中,這樣可以在運行時進行一些debug操作,當修改或者新增、刪除了一些java文件以后,Tomcat Context會自動重新load,這樣不用每次做了修改都需要重啟Tomcat。
在使用這款插件的時候,往往很多人會遇到這樣的一個異常:ClassNotFoundException: org.apache.catalina.loader.DevLoader,很多人解決的辦法往往是禁用DevLoader功能。其實DevLoader提供的功能是很有用的,它實現和擴展了WebappLoader。我們知道,默認情況下,我們需要把classes和jar文件都放到web應用所在的WEB-INF/classes和WEB-INF/lib下,但是在實際的開發環境下,往往需要引用到外部的classes和jar文件,比如另外一個項目中的classes,這個時候如果在沒有DevLoader的情況下我們需要把這些classes和jar文件拷貝到web應用所在的WEB-INF下的相應目錄中,而如果啟用了DevLoader,則沒有了上述的限制,可以加載項目用到的所有classpath中的classes和jar。
啟用DevLoader的方法:
選中Activate DevLoader
選中需要加載的類庫
在插件包中找到文件DevLoader.zip,解壓縮到tomcat/server/classes下。
http://sam9901.iteye.com/blog/114746
