What is different for Maven in the Enterprise
In my understanding Maven for Enterprise has a set of unique characteristics. Most of these characteristics are common sense options for almost all projects, but in the enterprise environment they sease being options and become requirements.
As a build platform, Maven is expected to deliver:
- Stable Community - this comes from being OSS project
A very interesting challenge is version maintance: if I have a thousand developers working on 500 projects - keeping versions in sync is a hustle. Some of it may be addressed by the release plugin, but that one is very limited in terms of project structure support. I think we are coming to a more fundmental requirement here: dependency graph manipulation tool, which supports:
- snapshot creation operation: a project is being modified, it needs to be marked as a snapshot
- snapshot promotion operation: project is approved into production - all dependents (not dependencies) should be modified as well
- is SCM aware: promotion should affect all active branches and non checked out dependents
Enterprise Development cycle
Maybe we should define a reference "enterprise software development cycle" and brainstorm how well Maven supports various aspects of it? Normally we always stopped at unit tests, completly ignoring QA/regression testing, saying: OK - it may happen behind the seen and then - by miracle - project is released; version may or may not change. Well - this is not going to fly if you try to sell it to a big company's software development management; first question will be: how does it support my real cycle?
Here is an attempt to define coarse cycle phases we can refine and generalize:
- initiation: a new project is either created in or checked out of SCM
- development - iterative process that includes unit and maybe integration testing
- development includes remote builds when intermediate code is checked into SCM, built by a "build server" - Continuum and results shipped back to the developer
- intermediate product maybe be deployed into QA environment and tested by developer(s) as part of development
- QA deployment & acceptance
- may result in firing a separate test battery: code coverage, PMD - etc.
- QA - iterative process resulting in the next bullet.
- Promotion - project is switched from snapshot to a version
- Production deployment (release?)
- Cycle repeats
I fully realize that this is an over simplified description, but we need to start with something and grow the meat.