2011-03-15 16 views
7

Me gustaría saber, si es posible y si hay una forma genérica para extender la funcionalidad de un plugin de Grails.Funcionalidad extendida de Grails Plugin

Recientemente instalé el plugin comentable, pero necesito hacerle algunas modificaciones. Como el código no se almacena junto con el proyecto (pero en el directorio de usuarios) si lo modifico, después de actualizar el complemento (o del proyecto en otra máquina instalada), estos cambios se pierden.

¿Alguien tiene alguna idea?

Gracias, Nicolas

Respuesta

9

Si desea anular un artefacto (por ejemplo, una clase de dominio) crear una con el mismo nombre en su proyecto. Los complementos se compilan por separado de las clases de la aplicación y sus artefactos se registran primero, por lo que si hay un artefacto en la aplicación principal, reemplazará el plugin. Solo asegúrese de usar el mismo paquete para las clases de dominio, aunque esto no es necesario para los controladores o servicios.

4

Si desea modificar el complemento por completo, puede intentar cambiar y volver a compilar el complemento y compilarlo en un archivo zip con un nombre diferente.

Luego puede instalar el plugin personalizado desde el código fuente. Puede referirse al question here.

0

En un proyecto, necesitábamos una lista de direcciones de correo electrónico permitidas, a las que la aplicación podía enviar correos, para un entorno (QA) para que diferentes partes involucradas en el proyecto pudieran probar el aplicación sin el riesgo de que se envíe ningún correo a los clientes de nuestros clientes (clientes finales).

Era un trabajo demasiado grande cambiar todos los bloques de código que hacían el envío de correos, así que implementé un extensor personalizado para una clase principal del complemento de correo (grails.plugin.mail.MailMessageBuilder) que tenía una lista de permitidos direcciones de correo electrónico desde la configuración de la aplicación y reemplazó un método que resolvió las direcciones antes de enviar el correo (toDestinationAddresses). Luego reemplacé un método de fábrica (del complemento), que produce MailMessageBuilders, por lo que produjo mis constructores personalizados, a través de Groovy metaClass en Grails bootstrap.

Esta fue una solución limpia, no intrusiva y funcionó muy bien.

Cuestiones relacionadas