2011-12-03 18 views
7

一個爲tomcat webapplication打包的war包含WEB-INF/classes和WEB-INF/lib/*。jarWEB-INF/classes/vs WEB-INF/lib/*。jar in classpath priority?

哪個在CLASSPATH中有優先權?

我問的原因是,我的應用程序使用A.jar,其中包含aspectj項目生成的方面;和B.jar,它們將與A.jar的方面進行編織。 當項目myapp被編譯時,它會生成許多Classes,它們會覆蓋來自B.jar的那些相同的類,並將它們打包到WEB-INF/classes目錄中。所以如果tomcat首先加載WEB-INF/lib/*。jar,那麼編織方面將不會生效

+1

類似http://stackoverflow.com/q/5474765/435605 –

回答

11

當處理從Web應用程序的WebappX類加載器加載類的請求時,該類加載器將首先在本地存儲庫中查找,而不是在查找之前進行委託。有例外。作爲JRE基類的一部分的類不能被重寫。對於某些類(例如J2SE 1.4+中的XML解析器組件),可以使用J2SE 1.4認可的功能(請參閱上面的常用類加載器定義)。最後,包含servlet API類的任何JAR都將被類加載器忽略。 Tomcat 5中的所有其他類加載器都遵循常見的委託模式。

因此,從Web應用程序的角度來看,類或資源加載看起來在以下庫,順序如下:

Bootstrap classes of your JVM 
System class loader classes (described above) 
/WEB-INF/classes of your web application 
/WEB-INF/lib/*.jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/i18n/*.jar 
$CATALINA_HOME/common/lib/*.jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar 

所以WEB-INF/classes中的WEB-INF/lib目錄之前首先搜索

編號:http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html

2

如果您將類放入WEB-INF/classes中,它們在WEB-INF /庫。我有時使用它來進行調試。 另請參閱here