2011-12-03 6 views
7

una guerra confezionata per un'applicazione web di tomcat contiene WEB-INF/classi e WEB-INF/lib/*. JarWEB-INF/classes/vs WEB-INF/lib/*. Jar in priorità del percorso di classe?

quali di questi ha priorità nel CLASSPATH?

la ragione per cui sto chiedendo è che la mia applicazione utilizzi A.jar, che contiene aspetti generati da un progetto aspectj; e B.jar, che devono essere intessuti con gli aspetti di A.jar. quando il progetto myapp è compilato, genera molte Classi che sovrascrivono quelle stesse classi da B.jar, queste sono impacchettate nella directory WEB-INF/classes. quindi se tomcat carica prima WEB-INF/lib/*. jar, allora gli aspetti tessuti non avranno effetto

+1

simile a http://stackoverflow.com/q/5474765/435605 –

risposta

11

Quando una richiesta di caricamento di una classe dal caricatore di classi WebappX dell'applicazione Web viene elaborata, questo caricatore di classi cercherà prima i repository locali, invece di delegare prima di cercare. Ci sono delle eccezioni. Le classi che fanno parte delle classi base di JRE non possono essere superate. Per alcune classi (come i componenti del parser XML in J2SE 1.4+), è possibile utilizzare la funzionalità approvata da J2SE 1.4 (vedere la definizione comune del classloader sopra). Infine, qualsiasi classe API JAR contenente servlet verrà ignorata dal classloader. Tutti gli altri caricatori di classe in Tomcat 5 seguono il solito schema di delega.

Pertanto, dal punto di vista di un'applicazione web, di classe o di una risorsa di carico cerca nelle seguenti repository, in questo ordine:

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 

Così WEB-INF/classes è cercato prima di WEB-INF/lib

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

2

Se si mettono le classi in WEB-INF/classi, hanno priorità prima dei barattoli in WEB-INF/lib. A volte ho usato questo per scopi di debug. Vedere anche here.

Problemi correlati