JavaZone 2007: Deploying Maven in the Enterprise
Kristoffer Moum from Arktekk gave us an entertaining overview of how to introduce Maven in a company.
A benefit of Maven is a standardized project structure, which means employees don't have to learn different set-ups.
Start with a company-wide Maven POM with repository references, deployment settings and dependency management.
Set up internal repositories: snapshot, release and third-party repos with Apache WebDAV; set up a Maven proxy which becomes a single entry point to both the internal and the external repos.
Kristoffer uses the Maven Proxy from Codehaus: simple to configure, flexible. Other implementations offer GUI configuration, etc.
All artifacts built by the CI server should be directly deployed to the internal repository (snapshots).
Transitive dependencies: poor third-party POMs add excessive dependencies. One solution is to graph the dependencies and manually exclude dependencies. For instance the maven dependency plugin with the 'tree' goal.
Implicit plugin versioning: version is not specified, so the latest and greatest is downloaded and used. This often turns out to be unstable, which may result in some strange behaviour. Solution: try to control plugin versions manually.
Redeploying released artifacts: causes the new release only to be deployed for those who delete it manually. This can create a really strange situation where half of the developers can't build the project. Should be illegal.
Transitive dependencies can give some problems when you get dependencies to different versions of the same artifact. Solution: add direct dependency.
It's not a good idea to introduce all of Maven at once, it's better to introduce it incrementally.
Can be tricky to find the right module granularity. Be pragmatic when dividing projects in modules; too few or too many are not good.
Everything should be doable through the IDE. Going through Maven every time will be slow.
Too many profiles can make the build hard to understand. Don't try to solve every problem with profiles.
Some good tips here. Maven seems to be used more and more in companies.