Переменная среды 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 (и получат код проекта для компиляции).