Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Compilar Groovy y Java juntos

miércoles 06/06/2007

Leo en GroovyLand una interesante serie de dos artículos sobre las dificultades que se presentan al compilar código Groovy y Java con dependencias cruzadas.

En el primer artículo se trata la dificultad del problema planteado. Supongamos que deseo utilizar clases Java desde Groovy: ningún problema, las compilo con javac y las pongo en el classpath... Supongamos que quiero usar clases Groovy desde Java: fácil también: compilo las clases groovy con groovyc y las pongo en el classpath... ¿Pero y si hay dependencias cruzadas, clases Java que dependen de clases Groovy que a su vez dependen de clases Java? Bueno, pues se trata de un problema conocido en el que ya hay gente trabjando, pero aún no hay una "solución oficial".

En el segundo artículo se propone una solución al problema: en realidad, para compilar las clases Java no necesitamos tener compiladas las clases Groovy, sólo necesitamos conocer su interfaz (cómo se llaman las clases, sus métodos públicos y los parámetros que aceptan, etc). Gracias a que groovyc es bastante modular, se puede modificar para que haga la compilación de Groovy en dos pasos. La solución propuesta es la siguiente:

  1. Analizar las clases Groovy con groovyc, y extraer la información "hueca" sobre la interfaz (o sea, nada de lógica).
  2. Pasarle esa información (meterla en el classpath) a javac, para que pueda compilar las clases Java.
  3. Con las clases Java en el classpath, completar la compilación de las clases Groovy.

De esta manera queda resuelto el problema de las dependencias cruzadas, y podemos compilar código Java y Groovy con libertad. La gente que escribe el artículo va a aportar el parche de groovyc al proyecto, de forma que seguramente estará disponible en la próxima beta de groovy1.1.

Una solución ingeniosa a un problema complejo. Me pregunto cómo se estará abordando este tema en JRuby... ¿alguien tiene información sobre eso?

 


Contenidos relacionados:



0 comentarios:

Tienes que estar registrado para iniciar sesión y poder publicar tus comentarios