¿Cómo agregar bibliotecas JAR al proyecto WAR sin enfrentar java.lang.ClassNotFoundException? Classpath vs Build Path vs / WEB-INF / lib

¿Cómo debería agregar bibliotecas JAR a un proyecto WAR en Eclipse sin enfrentar java.lang.ClassNotFoundException o java.lang.NoClassDefFoundError ?

La variable de entorno CLASSPATH no parece funcionar. En algunos casos, agregamos archivos JAR a la propiedad Build Path del proyecto Eclipse para comstackr el código. A veces necesitamos poner archivos JAR dentro de /WEB-INF/lib carpeta de la aplicación web Java EE para hacer que el código se ejecute en clases dentro de ese JAR.

No entiendo exactamente por qué CLASSPATH no funciona y en qué casos debemos agregar JAR a Build Path y cuándo exactamente esos JAR deben colocarse en /WEB-INF/lib .

La variable de entorno CLASSPATH solo la utiliza el comando java.exe e incluso solo cuando se utiliza sin ninguno de los -cp , -classpath , -jar . Es ignorado por IDE como Eclipse, Netbeans e IDEA. Consulte también java.lang.ClassNotFoundException a pesar de utilizar la variable de entorno CLASSPATH .

La ruta de comstackción es solo para las bibliotecas que deben obtener el código del proyecto para su comstackción. Colocar manualmente JAR en /WEB-INF/lib , configurar el ensamblado de despliegue o permitir que un sistema de comstackción externo como Maven coloque la como JAR en /WEB-INF/lib de WAR producido durante la comstackción, es solo para bibliotecas que son necesarios para que el código se implemente y ejecute también en el entorno de destino. Tenga en cuenta que no debe crear subcarpetas en /WEB-INF/lib . Los JAR deben colocarse en la raíz.

Algunas bibliotecas ya las proporciona el servidor Java EE o servletcontainer de destino, como JSP, Servlet, EL, etc. Por lo tanto, no es necesario colocar los JAR de esas bibliotecas en /WEB-INF/lib . Además, solo causaría problemas de carga de clases. Es suficiente para (indirectamente) especificarlos solo en la ruta de comstackción . En Eclipse, normalmente haces eso configurando el tiempo de ejecución objective según corresponda. Automáticamente terminará en Build Path . Consulte también ¿Cómo importo la API javax.servlet en mi proyecto Eclipse?

Otras bibliotecas, generalmente de terceros como Apache Commons, controladores JDBC y bibliotecas estándar no proporcionadas por el servletcontainer de destino (por ejemplo, Tomcat no admite JSF, CDI, JPA, EJB, etc.), deben terminar en /WEB-INF/lib . No necesariamente es necesario especificarlo en la ruta de comstackción . Solo quizás cuando ya lo tenga como Biblioteca de usuarios , pero debe usar la configuración del ensamblaje de implementación para esto. Consulte también ClassNotFoundException al usar bibliotecas de usuario en la ruta de comstackción de Eclipse .

En caso de que esté utilizando Maven, debe asegurarse de marcar las bibliotecas como provided si ya están provistas por el tiempo de ejecución de destino, como Java EE, Servlet, EL, etc. en el caso se despliega en WildFly, TomEE, etc. De esta forma no terminarán en /WEB-INF/lib de WAR producido (y pueden causar conflictos con las bibliotecas incluidas en el servidor), sino que terminarán en la ruta de comstackción de Eclipse (y obtener el código del proyecto para comstackr).

Esas JAR en la ruta de comstackción se referencian solo para el proceso de comstackción. Si exporta su Aplicación Web, no están incluidos en la GUERRA final (pruébelo).

Si necesita los JAR en tiempo de ejecución, debe colocarlos en WEB-INF / lib o classpath del servidor. Colocar los JAR en el classpath del servidor solo tiene sentido si varios WAR comparten una base de código común y tienen la necesidad de acceder a objetos compartidos (por ejemplo, un Singleton).

Si está usando Maven :

Abra las propiedades del proyecto y en Ensamblaje de despliegue, haga clic en Agregar …

A continuación, seleccione Entradas de ruta de comstackción de Java y seleccione Dependencias de Maven

Quiero dar la respuesta para la siguiente pregunta del enlace ClassNotFoundException oracle.jdbc.driver.OracleDriver solo en servlet, utilizando Eclipse

Resp .: En Myeclipse vaya al Servidor -> haga clic izquierdo en Myeclipse Tomcat7 -> Configure Server Connector -> (Expand) Myeclipse Tomcat7 -> Paths -> Prepend a classpath -> Add jar (agregue oracle14 jar) – -> ok