java - plugin - jdk netbeans jee
/ WEB-INF/classes vs/WEB-INF/lib (3)
Me gustaría empaquetar mis clases web Java EE6
(beans, filtros, servlets) en jar y colocarlas en el directorio /WEB-INF/lib/
junto con otros Java EE6
jar de utilidad y abandonar /WEB-INF/classes/
directory totalmente.
¿Hay diferencias sustanciales entre los dos en términos de carga de clases, acceso al contexto de la aplicación, etc.?
Gracias.
PD: Siempre que busque en Google alguna de las especificaciones de Java, siempre me redireccionaré al índice de documentación de Oracle, que está a una docena de clics de la URL original. ¿Alguien sabe que está pasando allí?
Bueno, en breve: imagina que tienes una clase org.example.Test.class
, si la pones en un org.example.Test.class
jar y en el directorio WEB-INF/lib/
, y copia la misma clase en WEB-INF/classes/
entonces el cargador de clases de esa aplicación usar el último (de WEB-INF/classes/
).
A veces puedes usarlo como ventaja, tengo una biblioteca y tiene un error ... Busco la fuente de esa clase (donde está el error; echo de menos la parte de cómo sé que ese error está en esa clase, esa es otra historia), agrego esa clase al proyecto con código fijo, y se compila en WEB-INF/classes/
mientras que la biblioteca todavía existe en WEB-INF/lib/
. La clase fija se utilizará hasta que la biblioteca se arregle.
En la definición del contenedor Tomcat Servlet: WEB-INF/classes
se busca antes de WEB-INF/lib
. Puede elegir delegar su carga de clases a su cargador de clases personalizado, incluso si se mantiene el orden anterior.
Si elige ir con un proveedor diferente, por ejemplo, JBOss, Glassfish, Jetty, es posible que tenga un orden diferente, pero no estoy seguro de eso.
Yo iría para /WEB-INF/classes
. Le permite ejecutar su aplicación en modo de depuración y clases de intercambio en caliente en el cambio. Si empaqueta todo como un contenedor, tendrá que volver a empaquetar y volver a implementar la aplicación cada vez que cambie una clase.