У меня есть два проекта 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) Как я могу это исправить, так что зависимости обрабатываются так, как они должны?
Путь Java Build Path
контролирует Java Build Path
к классам при компиляции, но вам также нужно настроить развертывание с помощью страницы свойств Deployment Assembly
вашего Dynamic Web Project
. В конце концов, вы могли бы добавить банку API для компиляции своего проекта, доступного как часть времени выполнения сервера, когда вы, наконец, развернете его или, как в вашем случае, использовали другой проект, который должен быть упакован как банка в вашем веб-приложении WEB-INF/lib для использования во время выполнения.