WEB-INF / classes / vs WEB-INF / lib / *. Jar в приоритете пути к классам? - PullRequest
9 голосов
/ 03 декабря 2011

Война, упакованная для веб-приложения tomcat, содержит WEB-INF / classes и WEB-INF / lib / *. Jar

кто из них имеет более высокий приоритет в CLASSPATH?

причина, по которой я спрашиваю, состоит в том, что мое приложение использует A.jar, который содержит аспекты, сгенерированные из проекта aspectj; и B.jar, которые должны быть сплетены с аспектами из A.jar. когда проект myapp компилируется, он генерирует много классов, которые переопределяют те же классы из B.jar, которые упаковываются в каталог WEB-INF / classes. так что если tomcat сначала загрузит WEB-INF / lib / *. jar, то сплетенные аспекты не вступят в силу

Ответы [ 2 ]

14 голосов
/ 04 декабря 2011

Когда обрабатывается запрос на загрузку класса из загрузчика классов WebappX веб-приложения, этот загрузчик классов сначала просматривает локальные репозитории, а не делегирует их перед поиском. Есть исключения. Классы, которые являются частью базовых классов JRE, не могут быть переопределены. Для некоторых классов (таких как компоненты синтаксического анализатора XML в J2SE 1.4+) может использоваться одобренная функция J2SE 1.4 (см. Определение общего загрузчика классов выше). Наконец, любой JAR, содержащий классы API сервлетов, будет игнорироваться загрузчиком классов. Все остальные загрузчики классов в Tomcat 5 следуют обычному шаблону делегирования.

Таким образом, с точки зрения загрузки веб-приложения, класса или ресурса выглядит в следующих репозиториях, в следующем порядке:

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 / классы сначала ищутся перед WEB-INF / lib

Ссылка: http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html

2 голосов
/ 03 декабря 2011

Если вы помещаете классы в WEB-INF / classes, они имеют приоритет перед jar-файлами в WEB-INF / lib.Я иногда использовал это в целях отладки.Смотри также здесь .

...