Как добавить библиотеки JAR в проект WAR без обращения к java.lang.ClassNotFoundException? Classpath vs Build Path vs / WEB-INF / lib

Как добавить JAR-библиотеки в проект WAR в Eclipse без обращения к java.lang.ClassNotFoundException или java.lang.NoClassDefFoundError ?

Переменная среды CLASSPATH , похоже, не работает. В некоторых случаях мы добавляем JAR-файлы в свойство Build Path проекта Eclipse, чтобы скомпилировать код. Иногда нам нужно помещать файлы JAR в папку /WEB-INF/lib веб-приложения Java EE, чтобы код работал на classах внутри этого JAR.

Я не совсем понимаю, почему CLASSPATH не работает, и в каких случаях мы должны добавлять JAR для построения пути и когда именно эти JAR должны быть помещены в /WEB-INF/lib .

Переменная среды CLASSPATH используется только командой java.exe и даже тогда, когда используется без каких-либо аргументов -classpath , -jar , -jar . Его игнорируют IDE, такие как Eclipse, Netbeans и IDEA. См. Также java.lang.ClassNotFoundException, несмотря на использование переменной среды CLASSPATH .

Путь сборки предназначен только для библиотек, которые необходимы для компиляции кода проекта. Ручное размещение JAR в /WEB-INF/lib или установка сборки развертывания или предоставление внешней системы сборки, такой как Maven, помещают как JAR в /WEB-INF/lib из WAR WAR во время сборки, это только для библиотек которые необходимы для того, чтобы код был развернут и запущен в целевой среде. Обратите внимание, что вы не должны создавать подпапки в /WEB-INF/lib . JAR должны быть размещены в корне.

Некоторые библиотеки уже предоставлены целевым сервером Java EE или сервлетконтейнером, таким как JSP, Servlet, EL и т. Д. Поэтому вам не нужно помещать JAR этих библиотек в /WEB-INF/lib . Более того, это может вызвать проблемы с загрузкой. Достаточно (косвенно) указать их только в пути сборки . В Eclipse вы обычно это делаете, устанавливая соответственно целевое время выполнения . Он автоматически закончится в пути сборки . См. Также Как импортировать API javax.servlet в проект Eclipse?

Другие библиотеки, как правило, сторонние, такие как Apache Commons, JDBC-драйверы и стандартные библиотеки, не предоставленные целевым сервером-сервлетом (например, Tomcat не поддерживает JSF, CDI, JPA, EJB и т. Д.), Нужно входить в /WEB-INF/lib . Вам не обязательно указывать его в пути сборки . Только, возможно, когда у вас уже есть это как пользовательская библиотека , но для этого вы должны использовать настройку сборки развертывания . См. Также ClassNotFoundException при использовании пользовательских библиотек в пути сборки Eclipse .

Если вы используете Maven, вам нужно обязательно убедиться, что вы помечаете библиотеки как provided если они уже предоставлены целевой средой выполнения, например Java EE, Servlet, EL и т. Д. В случае вы развертываете в WildFly, TomEE и т. д. Таким образом, они не попадут в /WEB-INF/lib из WAR (и могут вызвать конфликты с серверными библиотеками), но они попадут в Eclipse’s Build Path (и получить код проекта для компиляции).

Эти JAR-файлы в пути сборки ссылаются только на процесс сборки (компиляции). Если вы экспортируете свое веб-приложение, они не включены в окончательную WAR (попробуйте).

Если вам нужны JAR во время выполнения, вы должны поместить их в WEB-INF / lib или путь к classу сервера. Размещение JAR в пути к classам сервера имеет смысл только в том случае, если несколько WAR разделяют общую базу кода и имеют доступ к общим объектам (например, Singleton).

Если вы используете Maven :

Откройте свойства проекта, а в разделе « Развертывание» нажмите «Добавить» …

Затем выберите Java Build Path Entries и выберите Maven Dependencies

Я хочу дать ответ на следующий вопрос ссылки ClassNotFoundException oracle.jdbc.driver.OracleDriver только в сервлет, используя Eclipse

Ans: In Myeclipse перейдите на сервер -> щелкните левой кнопкой мыши на Myeclipse Tomcat7 -> Configure Connector сервера -> (развернуть) Myeclipse Tomcat7 -> Paths -> Prepend to classpath -> Добавить jar (добавить oracle14 jar) – -> оК

Interesting Posts

Как я могу заставить этот ASP.NET MVC SelectList работать?

Windows (7, 8, 10). Является ли чистая установка лучше, чем обновление, и если да, то почему? (быть конкретной)

Могут ли две марки использовать одну прошивку DSL-модема?

Можно ли увеличить только вертикальный размер фигуры в PowerPoint?

Как я могу сделать SMTP аутентифицированным в C #

Почему Chrome отправляет меня на главную страницу Google при попытке выполнить поиск?

Как безопасно хранить учетные данные (пароль) в приложении Android?

Загрузка DLL из DLL?

Как изменить тип идентификатора в Microsoft.AspNet.Identity.EntityFramework.IdentityUser

Почему нет подключенного диска, доступного под расширенным приглашением cmd, но находится под обычной подсказкой cmd?

Java Bouncing Ball

Как вызвать функцию VBA из ячеек Excel (2010)?

Как создать контекст рендеринга OpenGL с прозрачным фоном?

Mount дает неизвестный тип файловой системы 'vboxsf'

Как получить информацию о диске в C #?

Давайте будем гением компьютера.