2011-02-25 14 views
8

Actualmente estoy trabajando en la integración de Groovy con un proyecto de Java existente. La secuencia de comandos Groovy básicamente analiza XML en objetos y luego utilizará DAO existentes para guardar, actualizar, etc. Tengo 2 proyectos. Un maravilloso. Una java Usando Maven (utilicé el plugin gmaven), creo Java y luego construyo el proyecto Groovy.Integración de Groovy con Java

Me gustaría poder llamar a Groovy scripts desde el proyecto Java y viceversa, si es necesario. Estoy seguro de que hay una forma de hacerlo, pero no puedo hacerlo.

Por ejemplo Mis clases de Java son

State(1 Field) 
StateDAO 

El guión maravilloso ser llamado básicamente analiza un documento XML y luego se rellena una tabla utilizando el DAO con el valor, s y por ahora todo lo que le gustaría que do es publicarlo en una base de datos.

Háganme saber si tiene alguna sugerencia. ¡Gracias!

Respuesta

24

En términos generales, hay dos enfoques para integrar maravilloso con Java:

  1. Hacer la compilación de código Java y ejecutar código Groovy en tiempo de ejecución
  2. Compilar y paquete de código Groovy como parte de su construcción, al igual lo hace para código Java

Utilice 1. si necesita una solución de "secuencias de comandos" y el código de Groovy que se ejecutará solo se conoce en tiempo de ejecución. Por ejemplo, el código podría cargarse desde una base de datos o ingresarse en una pantalla GUI. Si simplemente desea hacer su vida más fácil al escribir algunas partes de su aplicación en Groovy, vaya con 2. Dos ejemplos típicos en los que esto puede dar resultados rápidamente son el análisis y las pruebas de XML (por supuesto, hay muchos más).

Suponiendo que está más interesado en 2., puede compilar Groovy y Java por separado o en conjunto. Si los compila por separado, las referencias estáticas solo pueden ir en una dirección, como si tuviera dos módulos Java. Si los compila juntos, puede mezclar el código de Groovy y Java arbitrariamente, como si fuera todo código Java en el mismo módulo.

La compilación de código Java y Groovy es posible gracias a la función de compilación Groovy llamada compilación conjunta. Desafortunadamente, GMaven tiene serios problemas con la compilación conjunta, y no hay señales de que esto cambie pronto. Para proyectos más pequeños, puedes salirte con la tuya, pero para proyectos más grandes te morderá (he estado allí). Hay soluciones, pero no vienen gratis. Si está abierto a las alternativas de (G) Maven, considere cambiar a Gradle, que tiene soporte Groovy mucho mejor. (Descargo de responsabilidad: soy uno de los desarrolladores de Gradle.)

Si decide seguir con GMaven, asegúrese de obtener su configuración correcta. Casi todos los proyectos que veo fallan en este paso, a menudo sin darnos cuenta. La documentación de GMaven está desactualizada, pero la lista de correo de Groovy contiene varias publicaciones sobre el tema. También puede copiar la configuración desde Spock (uno de mis propios proyectos).

Para habilitar la compilación conjunta de GMaven, agregue el objetivo generateStubs. Siempre que su proyecto compile sin este objetivo, omítalo. También hay un objetivo generateTestStubs, pero rara vez es necesario.

Esta es la historia corta. Para la larga historia, echa un vistazo al próximo libro de Manning Making Java Groovy. (No estoy afiliado con el autor.)

+0

¿Has usado el compilador Groovy-Eclipse para la compilación conjunta? Se engancha en el plugin maven-compiler. –

5

Para la sugerencia n. ° 1 anterior de Peter, armé una colección de ejemplos usando Java para ejecutar los guiones Groovy in a blog post awhile back que viene junto con code samples on github. También puedo respaldarlo con sus comentarios sobre GMaven y compilación conjunta: funciona, pero puede terminar causando más problemas de los que merece la pena. +1 en la consideración de Gradle también. Si bien la mayor parte de mi experiencia con el uso para producción es con Java source y el código de prueba de Groovy, hasta ahora ha funcionado perfectamente para mí. ¡Mucha suerte!