Как добавить библиотеки JAR в проект WAR, не сталкиваясь с java.lang.ClassNotFoundException?Classpath vs Build Path vs / WEB-INF / lib - PullRequest
8 голосов
/ 22 июля 2011

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

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

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

Ответы [ 5 ]

7 голосов
/ 22 июля 2011

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

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

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

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

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

1 голос
/ 22 июля 2011

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

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

0 голосов
/ 08 июля 2019

Эта статья объясняет ту же проблему в приложении Spring Boot. Также полезная информация о том, как загрузить JAR-файл Oracle и как включить зависимости, источник данных для установки и т. Д .:

Настройка Spring Boot с Oracle

0 голосов
/ 29 мая 2017

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

Откройте свойства проекта и в разделе Сборка развертывания нажмите Добавить ...

Затем выберите Записи пути сборки Java и выберите Зависимости Maven

0 голосов
/ 07 апреля 2017

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

Ответ: В Myeclipse перейдите на Сервер-> щелкните левой кнопкой мыши на Myeclipse Tomcat7 -> Настроить коннектор сервера -> (Развернуть) Myeclipse Tomcat7 -> Пути -> Добавить к classpath -> Добавить jar (добавить oracle14 jar) -> ok

...