Почему среда выполнения не может найти класс?

1

У меня есть два проекта eclipse, проекты A и B. Project A - это веб-приложение JavaEE, запущенное на Tomcat в eclipse. В проекте B имеется отдельный код приложения. Я добавил Project B в качестве зависимости от проекта к пути сборки проекта A и к пути Tomcat (в качестве пользовательской записи).

Оба проекта A и B имеют отдельные копии apache commons-lang-2.6.jar, который содержит класс StringUtils. Когда я запускаю сервер Tomcat, все начинается нормально. Когда запрос возникает, он обрабатывается сервлетом в проекте A (который импортирует и использует StringUtils). Затем он вызывает код в Project B, который также использует StringUtils. Однако код в Project B дает следующую ошибку:

SEVERE: Servlet.service() for servlet [***Servlet] in context with path [/***] threw exception 
[Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.apache.commons.lang.StringUtils

Очевидно, класс StringUtils был загружен для использования Servlet.
1) Почему среда выполнения не может найти/использовать уже загруженные StringUtils для выполнения кода Project B? 2) Как я могу это исправить, так что зависимости обрабатываются так, как они должны?

Теги:
servlets
tomcat
java-ee

1 ответ

2
Лучший ответ

Путь Java Build Path контролирует Java Build Path к классам при компиляции, но вам также нужно настроить развертывание с помощью страницы свойств Deployment Assembly вашего Dynamic Web Project. В конце концов, вы могли бы добавить банку API для компиляции своего проекта, доступного как часть времени выполнения сервера, когда вы, наконец, развернете его или, как в вашем случае, использовали другой проект, который должен быть упакован как банка в вашем веб-приложении WEB-INF/lib для использования во время выполнения.

Развертывание сборки Новое и примечательное упоминание

Ещё вопросы

Сообщество Overcoder
Наверх
Меню