* Easy access to remote packages as soon as they're posted.
* Versions must specified, so builds are very repeatable. You bear the responsibility of updating your dependencies, but you don't get surprised if a version decides to break compatibility, either.
Also, very decentralized, and it's easy to create a directory locally to hold the dependencies within a project (specify a file:// repository relative to ${project.dir}), or on a per-system-user level (mvn install), or on a per-company/organizational unit basis (self-hosted repos are a cinch).
It's actually a fantastic package management system tailored to Java that works extremely well. Its main problem is that it's also fantastically verbose, and including more and more build plugins can grow exponentially more arcane the greater the number of plugins involved. However, with Go's standardized directory layout among other things (I admit, I haven't done much research into trying Go out), something akin to Maven may actually be a good fit.
As a user, i've been occasionally fristrated with the decentralized nature of Maven. The isn't any single repository which would contain all packages (especially rc/beta versions). And in my experience repos and which repos are used to distributed a package tend to change fairly often. More often than not, I have to hunt for new repos when building from scratch.
Maven is also very slow when your project has ~10 repos and you need to download multiple dependencies. Having your own repo might be a necessity.
Maven is adequate as a dependency resolution tool, though I always marvel at the insane number of packages it downloads.
That said it should not ever be used as a build system -- ant exist for exactly that reason or you could use Make if you want your builds to go faster.
They take opposite approaches. Maven gives you scaffolding; it's up to you to customize it. Ant gives you practically nothing, but you can do whatever you want. If you want to code on the shoulders of giants then Maven will help you much more than Ant will, IMO.
* Cross-platform.
* Easy access to remote packages as soon as they're posted.
* Versions must specified, so builds are very repeatable. You bear the responsibility of updating your dependencies, but you don't get surprised if a version decides to break compatibility, either.
Also, very decentralized, and it's easy to create a directory locally to hold the dependencies within a project (specify a file:// repository relative to ${project.dir}), or on a per-system-user level (mvn install), or on a per-company/organizational unit basis (self-hosted repos are a cinch).
It's actually a fantastic package management system tailored to Java that works extremely well. Its main problem is that it's also fantastically verbose, and including more and more build plugins can grow exponentially more arcane the greater the number of plugins involved. However, with Go's standardized directory layout among other things (I admit, I haven't done much research into trying Go out), something akin to Maven may actually be a good fit.