Depurar codigo desde Eclipse usando el plugin de Jetty para Maven

martes, 10 de enero de 2012

Hace ya un tiempo estuve desarrollando una aplicación usando Maven como sistema de building. Pero llegué al punto de que cuando quería depurar la aplicación desde Eclipse, simplemente por la forma en la que funciona el plugin de Jetty para Maven, no me redirigía al código fuente cuando se detenía en un breakpoint, sino en el .class, claro, eso es un problema cuando necesitas ver las líneas de código. Pues bien, luego de un poco de búsqueda, encontré que en la documentación del plugin de Jetty explican cómo lograr depurar el código fuente.

Simplemente es necesario seguir el tutorial que está disponible en

Con esos dos pasos se puede comenzar a depurar el código usando Eclipse, un poco tedioso pero muy rápido de configurar y funciona muy bien.

Files are locked on Windows and can't be replaced

domingo, 1 de enero de 2012

Existe un problema al estar usando el plugin de Jetty para Maven, y es que el plugin bloquea (lock) los archivos de contenido estáticos como .html, .css, .js e imágenes y los usa en memoria (algo de un conector NIO). Por tal razón, si se está ejecutando un comando como mvn jetty:run, y se intenta editar este tipo de archivos, entonces aparece este error.


image.png
Para solucionar este problema, en la página del plugin tienen documentado este problema, que sucede solo con Windows. (Files locked on Windows)
Para solucionarlo se debe hacer lo siguiente:
1. Deshabilitar el uso de archivos mapeados en memoria. Para hacer esto, se debe extraer el archivo org/mortbay/jetty/webapp/webdefault.xml localizado en el JAR de Jetty (lib/jetty.jar) y cambiar la siguiente configuración a FALSE:

<init-param>
<param-name>useFileMappedBufferparam-name>
<param-value>trueparam-value>
init-param>

2. Asegurarse que esta configuración se aplica a todas las webapps. Para hacerlo, la siguiente configuración en etc/jetty.xml debe apuntar hacia nuestro archivo:
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="Contexts"/>Set>
<Set name="webAppDir"><SystemProperty name="jetty.home" default="."/>/webappsSet>
<Set name="parentLoaderPriority">falseSet>
<Set name="extract">trueSet>
<Set name="allowDuplicates">falseSet>
<Set name="defaultsDescriptor">/jesfre/jetty/mywebdefaults.xmlSet>
New>
Arg>
Call>

Espero les sirva y puedan seguir codificando a gusto.