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

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

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

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

4 ответов


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

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

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

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

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


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

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


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

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

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


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

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