07 septiembre 2010

Tomcat: errores en el despliegue

Se me ha dado el caso de desplegar una aplicación en Tomcat, hacer las pruebas correspondientes y replegarla. En el proceso hay veces que se quedan librerías .jar sin borrar. Normalmente las librerías están en el directorio WEB-INF/lib. Hasta ahora lo habitual era que se me quedasen en dicho directorio el mail-x.y.z.jar o el mysql-connector-java-x.y.z-bin.jar. No encontraba el motivo. El problema es que al re-desplegar la aplicación, por ejemplo desde Eclipse, no daba error, pero al ir al administrador de archivos, allí estaba todavía la versión antigua, y la nueva no se había desplegado.

Despúes de buscar durante tiempo, no debo ser lo suficientemente hábil, he conseguido entender que las librerías sólo deben estar en un sitio:
  • common/lib, o
  • webapps/[application]/WEB-INF/lib
Así que una vez localizada la duplicidad, hay que eliminarla. En mi caso particular, es necesario dejar las dos librerías en common/lib, ya que utilizo un pool de conexiones y en la configuración pide que esté en dicho directorio, y la librería mail-x.y.z.jar, por alguna razón similar y de la cual no me acuerdo (pero funciona!).

Utilizo Maven dentro de Eclipse desde hace un tiempo, por lo que para corregir la incidencia, me voy al fichero pom.xml y en las dependency que no quiero que se dupliquen utilizo la etiqueta scope:provided para que no se incluya en el fichero war de despliegue, y se utilice el que ya está en el servidor.



...

mysql
mysql-connector-java
5.1.13
provided



javax.mail
mail
1.4.1
provided

...


Y a funcionar!