While developing our presentation "Enterprise Maven" at ApacheCon US 2006, Rod Coffin and I identified the IDE Abstraction pattern for effective enterprise software development.
The components of this pattern are:
- Problem
- Duplicated configuration in the IDE and the build infrastructure
- Solution
- Generate IDE workspace configuration from the Maven POM
- Applicability
- Organizations with high levels of IDE adoption
- Projects with larger teams and variance in developer skill level
- Enterprise developers rely more on tooling
- Consequences
- Easier transition between different IDE vendors and versions
- Efficient workspace setup
- Less knowledge and control over IDE configuration (double edge sword)
- Adheres to the DRY principle (Don't Repeat Yourself)
That is all fine and good, but it takes code to make it happen. If you're an old Eclipse hand or perhaps are using it's heavier cousin RAD (Rational Application Developer) from IBM, you can realize this pattern by using the maven-eclipse-plugin.
This particular plugin is seeing a lot of activity especially in regard to the additional features to generate RAD specific configuration. You can take a gander of the rolling discussion about RAD integration and support at
http://jira.codehaus.org/browse/MECLIPSE-137. Richard van Nieuwenhoven contributed a custom RAD implementation and now John Casey has merged it into the core maven-eclipse-plugin. Hopefully with continued feedback and community collaboration we will soon have RAD IDE Abstraction straight from the maven-eclipse-plugin.
Some hurdles I've had to jump so far while using the contributed RAD plugin…
- Adapted to support multiple J2EE spec versions (specifically with the .j2ee and application.xml file writers)
- Adapted to support non-default Web Module source directories
- Added functionality to create and/or append .cvsignore files to exclude auto-generated content from CVS. (This would be needed by Subversion users as well, however the implementation would be markedly different.)
- Understanding how to effectively Unit Test with and without the Maven Embedder
All that being said… it is really nice to see a multi-project java application configured in RAD in seconds instead of hours.