У меня есть веб-приложение прежней версии, работающее в Tomcat 5.0.
Это веб-приложение имеет две банки в WEB-INF/lib, скажем, Нечто-2.0.jar и Панель-2.0.jar. Панель-2.0.jar на самом деле включает Нечто-1.0.jar в нем. Панель является также мертвым проектом, не означая обновления, никакого источника, но все еще важный для приложения.
Последний выпуск этого приложения требует Нечто-2.0.jar для некоторого другого материала. Наличие и Нечто-1.0.jar и Нечто-2.0.jar в пути к классу создает конфликт, конкретно тип ClassDefNotFound ошибки, где класс, который был позже добавлен в 2,0, не может быть найден в 1,0 и т.д.
В Eclipse простое решение состоит в том, чтобы щелкнуть правой кнопкой по Вашему Проекту, нажать Properties> Java Built Path> Order и Export и переместить Нечто-2.0.jar выше Панели-2.0.jar, таким образом, это решило сначала.
Как каждый выполняет этот тип упорядочивания пути к классу для банок в WEB-INF/lib в Tomcat?
Поместите Foo-1.0.jar в $CATALINE_HOME/общий/установленный (или в любое другое место, куда он будет загружен после Foo-2.0.jar).
Можно установить Class-Path в мейнфест банки. http://java.sun.com/developer/Books/javaprogramming/JAR/basics/manifest.html Я не могу обещать, что это решит проблему, но стоит попробовать.
Это немного халтурно, но может сработать. Измените имя банки Foo-2.0.jar на алфавитное впереди Bar-2.0.jar, скажем AFoo-2.0.jar
.Стриптизерша Foo-1.0.jar из Bar-2.0.jar. Так как это так, то просто неприятно ждать, когда это произойдет, как для разработки (нужно подтасовать среду dev.), так и для развертывания.
Вы не можете, так как эта функция недоступна в Tomcat. Если оба foo-1.0.jar и foo-2.0.jar нужны в классе одновременно, вам понадобится важная реорганизация классов.
Если BAR-2.0 может работать с Foo-2.0, то лучшее, что нужно сделать, чтобы восстановить BAR-2.0 самостоятельно без FO-1.0.jar внутри него.
Приоритет классы Tomcat 5 для WebApps составляет примерно следующим образом: сначала загрузочная / система ([ JRE / lib
, затем внутренние классы Tomcat), затем библиотеки WebApp (Первая Web-inf / Classes
, затем Web-inf / lib
), затем общие библиотеки (первая Tomcat / Common
, затем Tomcat / lib
) И, наконец, общие библиотеки Webapp-Share ( Tomcat / Shared
).
Итак, чтобы получить foo-2.0.jar
загружен до BAR-2.0.jar
, наилучшим образом, что вы можете сделать, это переместить BAR-2.0.jar
Из Web-Inf / lib
- Tomcat / Common
или Tomcat / Shared
.
Бар не загружается в алфавитный порядок их имени. По крайней мере, нет спецификации, который говорит это. Переименование их, чтобы изменить порядок алфавитного файла не имеет смысла.