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.

Configurar Cygwin + Console2

domingo, 13 de marzo de 2011

Esta vez hablaré de cómo configurar Console2 para que funcione con Cygwin. Cygwin es un emulador de comandos Linux sobre Windows. Console es una herramienta para Windows que no hace que MS-DOS funcione mejor pero si que se vea más chido. Y me di a la tarea de investigar cómo integrar estas dos herramientas para trabajar con comandos similares a las de Linux desde Windows usando el command.com pero con una mejor presentación que la que presenta MS-DOS.

En este tutorial veremos cómo instalar cada una de estas herramientas y cómo integrarlas para tener una experiencia bastante distinta al usar una consola en Windows. Además, veremos cómo configurar Cygwin para que al estar integrado con Console2 nos presente el prompt en una carpeta de nuestra preferencia en lugar de la carpeta por defecto.

Instalar Cygwin

1. Entra a http://cygwin.com/install.html, descarga y ejecuta el instalador setup.exe
2. O directamente desde esta liga setup.exe
3. En la primera pantalla de la instalación de Cygwin, clic en Siguiente.

4. Seleccionar el tipo de instalación. Yo lo haré directo de Internet, pero también puedes descargar todas las bibliotecas para posteriormente instalarlo desde un directorio local.

5. Selecciona el directorio de instalación.

6. Ahora selecciona una carpeta donde se almacenarán los archivos de instalación de Cygwin.

7. Si estás tras un servidor proxy, es hora de configurarlo.

8. En la siguiente pantalla selecciona un mirror de descarga, aqui realmente no se cuál sea el más apropiado, así que yo selecciono el que sea mientras no encuentre un ibiblio.

9. Ahora comienza a descargar la información de los archivos de instalación.

10. La siguiente pantalla muestra todos los paquetes que se instalarán. Haz clic en siguiente a menos que seas más curioso y quieras ver de qué se tratan todos los paquetes.

11. Comienza ahora la instalación de Cygwin.

12. Finalmente escoge las opciones finales de instalación.

13. Clic en Finish y ya tienes instalado Cygwin listo para trabajar pensando que usas Linux.

Instalar Console2

  1. Accede a esta dirección del proyecto Console, http://sourceforge.net/projects/console/ para descargarlo
  2. El archivo descargado será un .zip que deberás descomprimir en el directorio de tu preferencia. A mi me gusta tener una carpeta de herramientas de desarrollo (../dev/tools/)
  3. Una vez hecho esto, puedes entrar a la carpeta Console2 que descomprimiste y correr el archivo ejecutable Console.exe. Ya tienes Console2 listo para usarse.
Integrar Cygwin con Console2
  1. Abre Console2
  2. Abre la ventana de configuración en el menú Edit->Settings...
  3. En la ficha Tabs, clic en Add para agregar una nueva ficha
  4. Agrega la siguiente configuración a la nueva ficha
  5. Ahora puedes agregar la nueva ficha que has creado y poder ver Cygwin en acción desde Console2.
Pero normalmente quiero designar la carpeta en la cual aparezca inicialmente el prompt de la línea de comandos. Console2 provee esa opción (Startup dir:) en su configuración como podrás ver en la ventana donde configuraste la nueva ficha; pero no funciona con Cygwin. Para solucioar esto deberás editar el archivo por lotes en C:\cygwin\Cygwin.bat:

Cambia esto:
bash --login -i

por esto:
bash --login -i -c 'cd tu_directorio_de_preferencia; exec bash'


Ten en cuenta el el path de tu directorio deberá estar separado por diagonales normales ( / ) como en Linux y no invertidas ( \ ) como en MS-DOS. Por ejemplo: C:/Users/Jesfre/core_documents

Ahora cada vez que abras tu nueva ficha te posicionará automáticamente el prompt en el directorio que has coonfigurado.

Disfruta del seudo-bash en Windows.