Utilizar wine para probar aplicaciones Java en ambiente Windows desde Linux

Actualizado: Revisado para wine 1.4 y Java 1.6.0u32, 4 de junio de 2012

Al leer este título, lo primero que viene a la mente es: ¿Para qué correr aplicaciones Java sobre wine si Java existe para Linux? Además las aplicaciones Java son multiplataforma. Ajá, paremos ahí y revisemos la última palabra de la frase: multiplataforma.

Muchas veces queremos verificar que tal corre nuestra aplicación en otra plataforma, para precisamente verificar que es multiplataforma. Hay varias cosas que pueden dejar de funcionar (o funcionar diferente) cuando se corre en otra plataforma:
  • Nombres de archivo: Los separadores de nombres de archivo es lo más cambiante entre plataformas.

  • Llamadas a comandos externos: Hay unos cuántos problemas que se solucionan fácilmente en Linux invocando comandos ¿Y en Windows?. Un ejemplo a éste respecto es el método listRoots() de la clase File. Si se quiere saber los volúmenes montados, en Windows funciona perfecto, pero en Linux únicamente retorna "/", entonces una de las maneras de resolverlo es invocando al comando df (entre otros) parsear su salida y obtener las unidades montadas.

  • Codificación de caracteres: Nuestras letras acentuadas comúnmente se ven mal en otras plataformas si no tenemos el debido cuidado.

  • Applets: Probar nuestros applets en navegadores que no corren en nuestra plataforma de desarrollo. Por ejemplo, Internet Explorer sobre Linux. No sólo estaríamos probando nuestra aplicación en otra plataforma sino además en otro navegador.
Para los casos antes mencionados y algunos otros, nos gustaría verificar que tal corre nuestra aplicación en otra plataforma. Específicamente si estamos desarrollando en Linux, poder correr la aplicación en Windows. Si tenemos dual boot, perfecto, reiniciamos la PC en Windows y listo. El problema es todo lo que tenemos que esperar para hacer una prueba. Para ésto podríamos usar wine.

Para utilizar java sobre wine, simplemente se instala la versión Windows de la máquina virtual de Java usando wine así:

wine jre-6u32-windows-i586.exe


Una vez instalado, simplemente corremos nuestro programa en "Windows" así:

wine java -jar ~/jdk/demo/jfc/SwingSet2/SwingSet2.jar


Fíjense que la única diferencia es colocar wine adelante. Si tienen problemas gráficos prueben deshabilitar Direct3D:

wine java -Dsun.java2d.d3d=false -jar ~/jdk/demo/jfc/SwingSet2/SwingSet2.jar



Les en va a impresionar lo bien que corre.


Por supuesto siempre tenemos la opción CrossOver para hacer lo mismo en unos pocos clics. Presiona aquí para instalar Java Windows en Linux: https://www.codeweavers.com/compatibility/browse/name/?app_id=3883


Applets

Uno de los usos más frecuentes para wine es correr Internet Explorer en Linux y así probar como se ven nuestros sitios web. Bueno si somos desarrolladores de Applets, podríamos usar Internet Explorer sobre wine para poder verlos sin tener que salir de Linux. Basta con tener instalado Internet Explorer antes de instalar java. ¿Y que tal un applet en Firefox sobre windows?

Aquí les presento las instrucciones para hacer correr applets en java 1.4 Internet Explorer 6.0 Windows 98, escojo esta configuración porque todo corre casi perfecto.
  1. Instalar Internet Explorer 6.0 en wine simulando Windows 98, en este paso no me extenderé ya que hay sin número de artículos que lo explican. Usen winetricks para ello. Si tienen Crossover (versión comercial de wine) es cuestión de unos clics.
  2. Instalar Java 1.4 para Windows 98 en wine. Aquí les dejo el enlace: https://java.sun.com/products/archive/j2se/1.4.2_19/index.html
  3. Hasta aquí los applets deberían correr perfectamente. Pues no, así como la versión 6 de java tiene problemas con Direct3D en wine, java 1.4 los tiene con DirectDraw, cosa que no es tan sencilla desactivar para los applets. Lo que hay que hacer es ejecutar a mano el panel de control de java en wine, desactivando el directdraw para poderlo mostrar y ahí desactivar el directdaw para los applets. Aqui el comando:
    cd ~/.wine/drive_c/Program\ Files/Java/j2re1.4.2_19/lib/

    wine java.exe -Dsun.java2d.noddraw=true -Xbootclasspath/a:plugin.jar sun.plugin.panel.ControlPanel

    Cuando se esté ejecutando el panel de control, se debe ir a la pestaña Avanzado y escribir -Dsun.java2d.noddraw=true en al campo Parámetros del entorno de ejecución y presionar Aplicar.
Con los pasos anteriores ya los applets deberían correr en Internet Explorer en Linux. Para versiones posteriores es posible que se necesite la misma técnica para deshabilitar el Direct3D en java. Cuando tenga una buena prueba actualizaré este post.

Hasta la próxima...

Nota: Si esta información te es de utilidad o piensas que se puede mejorar, por favor deja un comentario con tus observaciones.

8 comentarios:

  1. Gracias por el post. Ya he conseguido instalar internet explorer y jre tal y como explicas. La cosa es que al llegar a la página del applet, explorer me sigue diciendo que necesito jre y me manda a la página de descarga.

    Uhm... ¿Cómo le digo a explorer que use el jre instalado?

    ResponderEliminar
  2. No deberías tener que decirle nada. Al instalar ambas aplicaciones en la misma configuración de wine, debería funcionar. ¿La página está online? ¿L apuedes colocar? Así puedo revisar

    ResponderEliminar
  3. Hola, he desarrollado una aplicación java en Windows XP, ¿cómo puedo comprobar que se ejecuta correctamente en otras plataformas (Linux, Mac, Solaris,...)?Si alguien la puede probar en dichas plataformas se lo agradecería. La aplicación se llama Descanso50 y la pueden descargar gratuitamente en http://www.eratosdigital.com/aplicaciones.htm#Descanso50
    Muchas gracias.

    ResponderEliminar
  4. Hola Alfonso, en Linux corre. Tienes que mejorar un poco el empaquetado porque los archivos léame tienen problemas de acentos en los nombres. Y debes comprimir con tar.gz o zip para que sea más pequeño de resto está bien. Aquí te va el screenshot en openSuse 11.4 64bits http://dl.dropbox.com/u/5916194/descanso.png

    ResponderEliminar
  5. Siguiendo la línea de este post y aprovechando la intervención de Alfonso, en el siguiente screenshot muestro la versión Windows corriendo en Linux sobre wine con Java para Windows instalado en wine tal como se explica en este post: http://dl.dropbox.com/u/5916194/descanso2.png

    Usando esta técnica Alfonso podría haber desarrollado su aplicación en Linux y pooderla probar en Windows sin salir de su ambiente.

    Saludos

    ResponderEliminar
  6. Muchas gracias por contestar tan rápido.
    Saludos

    ResponderEliminar
  7. Muchas gracias, de maravilla tus consejos!

    ResponderEliminar

- Comenta, comenta, adelante. Así nos animas a seguir el blog -

Búsqueda

CodeWeavers