the property page open library error configurar java eclipse java-ee jar classpath

property - CLASSPATH, Java Buld Path(eclipse) y WEB-INF / LIB: ¿qué usar, cuándo y por qué?



java build path netbeans (7)

Además, sé que WEB-INF / LIB es un lugar donde puedes poner archivos JAR que tu aplicación web va a usar. Sin embargo, puse JAR en WEB-INF / LIB solo para que se ignoren. ¿En qué situaciones debo poner JAR en la carpeta WEB-INF / LIB? ¿Cómo hago para que Eclipse o el servidor web los noten?

El problema real que tiene aquí es probable que no haya obtenido Eclipse para desarrolladores de Java EE y / o que acaba de crear un Proyecto Java genérico en lugar de un Proyecto web dinámico y haya creado usted mismo la estructura de carpetas necesaria.

Si crea un Proyecto web dinámico en Eclipse para desarrolladores Java EE , entonces Eclipse agregará automáticamente cualquier biblioteca en WEB-INF/lib a la ruta de compilación . La ruta de compilación se dice aproximadamente del classpath que se usa tanto en tiempo de compilación como en tiempo de ejecución. En otras palabras: simplemente deje caer el JAR de terceros, realmente no se necesita hacer nada más.

Tenga en cuenta que Java distingue entre mayúsculas y minúsculas, por lo que debería llamarse realmente WEB-INF/lib , no WEB-INF/LIB . Pero de todos modos, si crea un proyecto web dinámico , Eclipse generará automáticamente la estructura de carpeta / archivo correcta para usted.

Como dijeron otros, ignore la variable de entorno %CLASSPATH% . Solo lo utiliza javac.exe / java.exe e incluso solo cuando no especifica ninguno de los -cp , -classpath o -classpath . En el mundo real, esta variable de entorno rara vez se usa, es solo una conveniencia para los principiantes (y desafortunadamente también la más confusa, nunca deberían haberla inventado).

Recientemente cambié a J2EE desde .NET, y estoy confundido acerca de dónde colocar los archivos JAR. Sé que CLASSPATH, WEB-INF y Eclipse''s Java Web Path son todos lugares donde se pueden almacenar JAR, pero estoy confundido sobre qué carpeta usar, cuándo y por qué.

Primero, tenemos CLASSPATH. Normalmente establezco esto yendo a "Variables de entorno" dentro de "Mi PC". Sé que este es el lugar predeterminado donde el compilador Java busca los archivos JAR. Cuando agrego una carpeta o un JAR a mi variable de entorno CLASSPATH, ¿por qué Eclipse, el compilador de Java y el servidor web lo ignoran?

Además, sé que WEB-INF / LIB es un lugar donde puedes poner archivos JAR que tu aplicación web va a usar. Sin embargo, puse JAR en WEB-INF / LIB solo para que se ignoren. ¿En qué situaciones debo poner JAR en la carpeta WEB-INF / LIB? ¿Cómo hago para que Eclipse o el servidor web los noten?

Hasta ahora, lo único que funciona para mí es realmente cambiar la ruta de compilación de Java para un proyecto de Eclipse. Seleccionaré los JAR que necesito y presionaré "Agregar JAR externos". La mayoría de las veces cuando hago esto, Eclipse reconocerá mis JAR y leerá las clases allí. Sin embargo, me he encontrado con un montón de errores aleatorios extraños al hacer esto (sobre todo teniendo que ver con las dependencias, creo). Por alguna razón, tengo la sensación de que esta no es la manera correcta de hacer las cosas, y que me falta información vital. ¿Cuándo debería agregar manualmente archivos JAR externos dentro de Eclipse y cuándo debo hacer las cosas de manera diferente? ¿Cómo es que la Ruta de compilación de Java de Eclipse no parece conocer las carpetas en mi variable de entorno CLASSPATH?

Realmente, me gustaría obtener una mejor comprensión de CLASSPATH, la ruta de compilación de Java de Eclipse y la carpeta WEB-INF / LIB: los propósitos que sirven, las relaciones entre ellos y dónde debería ubicar mis archivos JAR en varios situaciones Agradecería cualquier consejo que me pueda dar, o cualquier artículo que pueda recomendar.

Gracias.


Eclipse requiere que especifique la ruta a sus bibliotecas, archivos jar (en Propiedades -> Ruta de compilación de Java -> pestaña Bibliotecas). Esto se puede encontrar en el archivo de proyecto .classpath.

Por lo general, usted tiene las librerías JRE en su ruta (que también estaría en su ruta de clase), por lo tanto, agregar las libs a la ruta de clases y actualizar la ruta de compilación de eclipse funcionaría.

El directorio WEB-INF debe ser el lugar que contenga la información necesaria para su aplicación web.


Java tiene una larga historia y la experiencia ha demostrado que algunas ideas eran buenas y otras malas.

La variable de entorno CLASSPATH fue la forma inicial de decirle a la máquina Java dónde ubicar las clases de su programa y funciona razonablemente bien para los programas de línea de comando. Rápidamente se descubrió que esto no debería ser una cosa global (ya que tienden a ensuciar las cosas a la larga) sino una cosa por programa. Esto se puede hacer mediante la creación de un script de envoltura / archivo BAT que establece la variable y ejecuta la máquina Java.

Todo estuvo bien, entonces la gente quería escribir cosas del servidor web en Java. La API de Servlet se creó cuando una aplicación web es una unidad autónoma: esto resultó en que CLASSPATH para cada aplicación web son los archivos desempaquetados en WEB-INF / classes más los archivos jar en WEB-INF / lib. Y solo eso. Esto significa que la variable global CLASSPATH se ignora. Se ha encontrado que esto es MUY bueno, por lo que el concepto ha migrado a otro lugar.

Por ejemplo, un "jar ejecutable" (que Eclipse llama un "jar ejecutable") que se invoca con "java -jar foobar.jar" contiene el classpath completo DENTRO del Frasco en un archivo de manifiesto especial. Java Web Start, que se utiliza para iniciar programas Java desde un servidor web, lista explícitamente el classpath completo en el archivo de configuración en el servidor.

Pero, para empezar. Si quieres escribir una aplicación web Java:

  1. Obtenga la versión Eclipse Java EE .
  2. Cree un nuevo proyecto web dinámico, por ejemplo, llamado foobar.
  3. Arrastre y suelte (o copie / pegue) los archivos jar que necesita en foobar / WebContent / WEB-INF / lib
  4. Crea un nuevo archivo llamado foobar / WebContent / index.jsp. En el archivo en blanco, escriba <h1>Hello World <%= new java.util.Date() %></h1>
  5. Haga clic con el botón derecho en el editor de index.jsp, seleccione Ejecutar -> Ejecutar en el servidor, y elija la vista previa Básica -> J2EE en el servidor localhost y Finalice.

Se abrirá una ventana del navegador, ya sea en un navegador o dentro de Eclipse, que representará su página JSP. Puede cambiar la página JSP, guardarla con Ctrl-S y volver a cargar la ventana del navegador para ver los cambios.


No soy un experto en Eclipse, pero creo que su problema puede responderse así:

1) CLASSPATH es una variable de entorno que se lee cuando ejecuta programas Java y el cargador de clases lo utiliza para determinar dónde se colocan las clases.

Me gustaría modificar la variable CLASSPATH solo en el caso de que esté ejecutando un programa java desde un script, ya que esto le permite lanzar cómodamente un programa y asegurarse de que se encuentran las clases. Este no sería el caso para usted, ya que está desarrollando la aplicación web.

2) WEB-INF / lib es el directorio bajo el cual el cargador de clases del contenedor de la aplicación web (como tomcat o glassfish) investiga si su aplicación web necesita resolver una clase. Entonces colocas allí las clases que se utilizan en tu aplicación web.

Algunos IDE incluyen las bibliotecas / archivos .jar que está utilizando en un proyecto automáticamente para el paquete.

3) Biblioteca de Eclipse / classpath que se resuelve durante el tiempo de desarrollo. Supongo, pero me disculpo por suponer, ya que uno no debería hacer esto;), que puede definir una biblioteca (agregar archivos .jar externos a los proyectos) y autocompletar / todas las otras características interesantes deberían comenzar a trabajar con esto, como básicamente haces que esas clases sean visibles para el IDE con esa actividad. También supongo que puede marcar esas bibliotecas para que el IDE las agregue automáticamente a los proyectos web, etc.

En general, una buena lectura sobre cómo se encuentran las clases durante la ejecución está here (es la documentación oficial de un sol). También un buen lugar para leer sobre esto es la documentación de la clase ClassLoader.


Si se trata de aplicaciones web, / WEB-INF / lib es el lugar portátil para colocar JAR. Aquí es donde los servidores servlets de los servidores web esperan encontrar los archivos jar de una aplicación.


Tomados en conjunto, los comentarios también me ayudaron. Había agregado todos los jena .jars a la ruta de compilación desde eclipse, pero eso no fue suficiente. Siguiendo la sugerencia de "agregar a WEB-INF / lib" parecía intuitivo arrastrar desde la carpeta de bibliotecas a WEB-INF (desde dentro de eclipse), pero eso no funcionó. Tampoco copió los .jars a WEB-INF. Eventualmente, arrastré y solté desde el escritorio de Windows a la carpeta lib de WEB-INF en Eclipse, y eso solucionó el problema. Sería bueno si cualquier .jars agregado a la ruta de compilación se copiara automáticamente a WEB-INF lib por Eclipse. En caso de que importe, esto fue eclipse EE IDE, liberación Indigo, en Windows 7.


El CLASSPATH que configure en su entorno afecta solo las aplicaciones Java independientes, es decir, las que ejecuta desde un símbolo del sistema o un icono. Como habrás notado, Eclipse ignora esto. Establece sus propios classpaths por proyecto.

javac y java , si se llaman desde el símbolo del sistema, deberían / ​​pueden respetar esta ruta, pero ya no se considera una buena práctica hacerlo. Resultó que cada aplicación necesita su propio conjunto de cosas, por lo que un CLASSPATH global realmente no está haciendo ninguna de ellas. La práctica moderna es simplemente especificar el classpath con la opción -cp en la línea de comando para javac o java .

Un servidor de aplicaciones web independiente también configurará su propio classpath. Desde la línea de comandos o GUI, los WebAppServers generalmente se inician mediante un script ( .BAT o .sh ) que configura un classpath usando -cp . Tomcat tiene un directorio llamado common common/lib donde espera ver las bibliotecas que deberían estar disponibles, el servidor y todos los programas que se ejecutan debajo de él. Pero generalmente no necesitará / querrá meterse con esto, ya que es costumbre que las aplicaciones proporcionen sus propios grupos de bibliotecas en WEB-INF/lib .

Por lo tanto, para una aplicación web, pondría sus varios frascos en el directorio lib , bajo WEB-INF , suponiendo que Eclipse precompila dicha estructura de directorios para usted.

Todas las libs que necesita también deben ser conocidas por Eclipse. En el Explorador de proyectos, selecciono la totalidad de ellos a la vez, hago clic con el botón derecho y selecciono Build Path | add to build path Build Path | add to build path . Es más fácil que jugar con la ruta de compilación del proyecto de Eclipse manualmente.