Ответ 1
Переменная среды CLASSPATH
используется только командой java.exe
и даже тогда, когда используется без аргументов -cp
, -classpath
, -jar
. Его игнорируют IDE, такие как Eclipse, Netbeans и IDEA. См. Также java.lang.ClassNotFoundException, несмотря на использование переменной среды CLASSPATH.
Путь сборки предназначен только для библиотек, которые необходимы для компиляции кода проекта. Ручное размещение JAR в /WEB-INF/lib
или установка сборки развертывания или предоставление внешней системы сборки, такой как Maven, помещают <dependency>
в JAR в /WEB-INF/lib
выпущенной 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, вам нужно обязательно убедиться, что вы помечаете библиотеки как <scope>provided</scope>
, если они уже предоставлены целевой средой выполнения, например Java EE, Servlet, EL и т.д., если вы развертываете в WildFly, TomEE и т.д. Таким образом, они не окажутся в /WEB-INF/lib
произведенной WAR (и могут вызвать конфликты с библиотеками, связанными с серверами), но они попадут в Eclipse Build Path (и получите код проекта для компиляции).