Java: El problema del órden de las classes en Eclipse

Recientemente he tenido que implementar un proyecto Maven con su plugin de overlays. En concreto, lo que he tenido que hacer ha sido extender un proyecto web maven que ya existía, para poder sobreescribir solo algunos de los fuentes que lo forman, como etsilos visuales y algún pequeño cambio a nivel de código fuente.

Antes de seguir, si no conocéis el tema de overlays de Maven, os recomiendo encarecidamente profundizar un poco en el tema, merece la pena: https://maven.apache.org/plugins/maven-war-plugin/overlays.html

Siguiendo con lo que os quería comentar, mi problema es que cuando ejecutaba el proyecto hijo, el que sobreescribe el original, todo parecía funcionar correctamente: overlays estaba haciendo su trabajo sin problemas, y mis estilos estaban siendo sobreescritos sin mayores incidencias. Pero, siempre hay un pero, a la hora de debuggar sobre Eclipse, el tema se complica, y en vez de trabajar sobre las classes java sobreescritas, se utilizaban las originales.

Menudo dolor de cabeza! Por mucho que buscaba no daba con el tema. Claramente era un problema de preferencias de órden de los fuentes: Eclipse no se entera de que el proyecto es un overlay (es la idea) e intenta debuggar las classes originales, no es la idea…

Bien, aquí está la solución, y esto sirve para cualquier proyecto, ya sea con empaquetado jar o war. En mi caso utilizo un servidor de aplicaciones Tomcat 7. Si nos vamos a Debug configurations… y buscamos nuestro servidor, expandimos sus propiedades, y en la pestaña Source, tenemos:

tomcat_debug_preferences

Mi proyecto es el que aparece en primer lugar, el segundo es el sobre el que realizo el overlay (el original) y los otros son dos proyectos importados, de Sentilo. En condiciones normales, vuestro proyecto no aparecerá, solo de los que depende. Esta lista es de órden preferencia. Es decir, a la hora de compilar y debuggar, Eclipse buscará los fuentes en ese órden. Vemos claramente el problema: nuestras classes sobreescritas no aparecen! Solución simple: añadimos nuestro propio proyecto y lo colo camos en primer lugar (botón Add…).

Una vez echo esto, al arrancar Tomcat en modo debug, cargará por preferencia nuestras classes, y luego las de los proyectos restantes. Por tanto, todas aquellas classes que hayamos sobreescrito las obtendrá del primer proyecto de la lista, que es el nuestro. Si las encuentra, seguirá en órden de preferencia con los proyectos restantes.

Ahora ya podemos debuggar, sea cual sea la naturaleza de nuestro proyecto, decidiendo nuestro órden de preferencia en los fuentes.

Espero haberos ayudado!

Jordi

 

 

Share Button

2 comentarios

  1. Hola Jordi, me ha ayudado mucho tu post, gracias a el pude conocer el plugin.
    Tengo un pequeño problema. Debo realizar exactamente lo mismo que tu “lo que he tenido que hacer ha sido extender un proyecto web maven que ya existía, para poder sobreescribir solo algunos de los fuentes que lo forman, como etsilos visuales y algún pequeño cambio a nivel de código fuente”.
    El proyecto es un .ear que tiene un .war y muchos .jar. El problema es que al realizar el overlay y compilar, no me trae todos los archivos ( solo los xhtml, css, js y librerias principales), no me guarda los .jar que tiene el .ear… no se como hacer que estos se incluyan. Primero, me gustaria hacer una prueba, compilar el war sin agregar nada, compilarlo y subirlo al servidor, en rigor deberia funcionar todo tal cual como esta.
    Espero me puedas ayudar, llevo mucho tiempo sin poder solucionar esto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.