The Grails framework has a lot of constructs/features that allows for adhering to the DRY principle (“don’t repeat yourself”) within a project. That is: within a specific project you’re seldom required to repeat identical blocks of settings or code. So far so good.
However, the more I’ve worked with Grails the more of I’ve observed that I repeat code not within the same project but between projects. That is project A has controllers, GSP:s and images that overlaps with project B. This is a maintenance nightmare since bug fixes in project A must also be fixed in project B, etc.
I’d like to take DRY to the next level by not duplicating code between my projects.
My question: How do you tackle this problem (violated “inter-projects DRY”) in your own internal Grails projects?
Please be very specific/concrete. If possible try to include specific code examples on how you solve it in practice.
I agree with Lee, Using common/shared plugins is probably the best way to go. At one place that I worked we had quite a few internal plugins for this very reason.
The most common pattern is to put your common domain objects into their own plugin. This works really well for domain classes or services. We didn’t end up refactoring the controllers, views, and static resources into a plugin, but the same principle should apply.
Long story short: Reuse of Grails artifacts = use a plugin.